我有一个字段,人们在那里输入他们的IP。因此,我尝试使用jquery验证该字段:
$.validator.addMethod("http-ipvalidation", 
    function(value, element) {
        return /^[\d.]+$/.test(value);
    }, 
   "Sorry, only numbers and dots allowed here"
);但有些人正在使用DynDNS,这样就可以使用url了。所以现在我需要同时允许这两种情况。有没有办法把默认的jquery url验证和我的自定义IP验证结合起来?
我可以修改jquery的url检查,但是这个正则表达式太疯狂了,所以我不知道从哪里开始:
return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(val);另外,我认为允许人们在没有http(s)://的情况下进入网站会很好。总而言之,我想创建验证,用户可以在其中输入:
12.34.56.78、my.domain.com或http://my.domain.com
也许,我应该只做一个简单的验证,去掉一些特殊的字符,然后就不做了?提前谢谢。
发布于 2012-04-01 09:03:30
我建议几乎不做任何事情来验证这个字段;IDN意味着用户可以合法地在该字段中输入几乎任何内容:█▄ִ█▄█ִ▀▄▀.tk (目前是域名抢占者)或█ִ̲̲̲̅̅̅bִ̲̲̅̅oִ̲̲̅̅xִ̲̲̅̅eִ̲̲̅̅dִ̲̲̲̅̅̅█.tk (一个编目一些IDN域名的网站)或其他看起来很可怕但却合法的地址,大多数浏览器都可以将这些地址转换为幕后的ASCII对应地址。
发布于 2012-04-01 09:08:04
这就是UI开发人员我(和你,听起来像是)真正进入有趣的计算机科学的地方。您可能只需要学习几个小时的正则表达式,而您将在接下来的职业生涯中使用正则表达式。
我认为最直接的方法是通过两次传递:
资源:http://www.regular-expressions.info/javascript.html http://txt2re.com/
发布于 2012-04-01 09:12:59
这可能会稍微回避这个问题,但我可能会把它留给像ping、curl或nslookup这样的unix程序。我不知道你是否出于其他原因想这样做,但我认为它会行得通。
$.validator.addMethod("http-ipvalidation", 
    function(value, element) {
      result = false
      $.getJSON({async:false,url:verify.php,success:function(resp){result=resp.result}})
      return result;
    }, 
  "Sorry, ip address invalid"
);在verify.php中,你会有类似这样的东西:Ping site and return result in PHP
$ch = curl_init($url);  
curl_setopt($ch, CURLOPT_TIMEOUT, 5);  
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
$data = curl_exec($ch);  
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
curl_close($ch);  
if($httpcode>=200 && $httpcode<300) {  
    return true;  
} else {  
    return false;  
}这样,无论他们输入的ip地址是否无效,或者如果它不是真实的IP地址,它都会抛出一个错误。我不知道这是不是你想要的行为。
https://stackoverflow.com/questions/9961012
复制相似问题