我有一个字段,人们在那里输入他们的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: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
复制相似问题