2012-04-01 73 views
0

我有一个字段,人们输入他们的IP。所以我尝试使用jquery验证该字段:与ip和http 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.78my.domain.comhttp://my.domain.com

也许,我应该只需要一个简单的验证采取了一些特殊的字符,并留在这一点?提前致谢。

回答

1

我推荐几乎没有做任何事来验证这个领域; IDN意味着用户可以合法地输入几乎任何东西到现场:█▄ִ█▄█ִ▀▄▀。tk(当前是域名抢注者)或█ִ̅̅̅bִִִִִ̅̅̅̅̅̅̅̅̅̅̅d██。tk(一个编目IDN域名的网站)或其他可怕的大多数浏览器都可以将它们视为合法地址,然后将它们转换为其后台ASCII对应的地址。

0

这是UI开发人员我(和你,听起来像)真正进入计算机科学乐趣的地方。你可能只是看几个小时的正则表达式学习,并且你将在你的职业生涯中使用正则表达式。

我认为最简单的方式做这将是两个通道:

  1. 确定它们是否已输入网址或IP地址。确定它是一个IP应该很容易。也许你会去掉所有的“。”,然后检查以确保只有数字。
  2. 根据步骤1的结果运行IP地址或网址验证。正如SArnold所说,您可能没有太多可以验证的网址,但您可以通过这种方式为其设置http://可选参数。

资源: http://www.regular-expressions.info/javascript.html http://txt2re.com/

0

这可能是回避问题的一点点,但我可能会推迟它像平,卷曲或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地址。我不知道这是否是你想要的行为。