0
上有效的URL失败我使用jQuery验证来验证网址:http://docs.jquery.com/Plugins/Validation/Methods/urljQuery验证野生
我发现正则表达式jQuery使用不是一个很好的在野外的URL。当然,根据某些RFC可以完善浏览器和服务器并不遵循RFC。它看起来像jQuery验证正则表达式需要改进。
到目前为止,我发现jQuery URL验证程序错误地将带有{或}字符的URL标记为无效。但是,这些字符在流行的浏览器中正常工作,并在流行的网站上使用。
这里是工作正常野生一个URL的一个例子但是失败的jQuery URL验证:
http://www.bestbuy.com/site/amazon-kindle-fire-hd-7-inch-tablet-with-8gb-memory-2nd-generation-black/2216082.p?id=1219070629225&skuId=2216082&ref=06&loc=01&ci_src=14110944&ci_sku=2216082&extensionType={adtype}:{network}&s_kwcid=PTC!pla!{keyword}!{matchtype}!{adwords_producttargetid}!{network}!{ifmobile:M}!{creative}&kpid=2216082&k_clickid=046dfb11-a86b-b669-52e3-00004228f299
jQuery验证使用下面的正则表达式来验证网址:
url: function(value, element) {
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
return this.optional(element) || /^(https?|s?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(value);
}
有谁知道一个更好的方法来验证在JavaScript中的URL或更好的正则表达式,可以处理真实世界的URL?
http://regexlib.com/ - 或者只是不验证正则表达式,因为甚至有效的URL可能不会解析为实际页面。 – Blazemonger
不应该将网址设置为“encodeURI”,然后放入正则表达式中?因此,它应该通过验证。我一直认为特殊字符(包括{})是urlencoded,这就是为什么浏览器**会处理它们 – eithed