没有一个浏览器使用什么样的正则表达式HTML5输入类型=网址是什么?(What regular ex

2019-09-17 06:55发布

我工作的一个HTML5输入模式填充工具,我试图验证在JavaScript中的输入型=网址完全一样的浏览器(Chrome)不,但无法找到一个JavaScript或Perl兼容的正则表达式的任何文件。 因为它是一个填充工具,我并不特别介意它匹配所有URL的准确(这是不可能的),而是它模仿的浏览器是如何工作的。

会有人知道PERL语法相同的模式?

谢谢

Answer 1:

阅读在关于规范http://www.w3.org/TR/html5/forms.html#url-state-(type=url) :

你的填充工具应消毒的输入,即除去换行和修剪的字符串开始。 句子“ 用户代理必须不能让用户插入‘LF’(U + 000A)或‘CR’(U + 000D)字符 ”,也可能是有趣的。

结果应该是一个有效的 , 绝对的 URL。 在那里引用的RFC 3986和3987将是描述URL验证,关于剖面解析URL可能也有趣。

您的填充工具可能不仅验证的URI,它也可以解决相对URI 。 至少,在验证URI将与algortihm,而不是寻找一个合适的正则表达式更加简单。 然而,即使在RFC提到了在解析已经验证的URI正则表达式附录B中 。



Answer 2:

通过GitHub上的几个HTML5 shivs搜索,看是否有人遇到一个理想的表达之后,我相信我发现的东西,是非常接近,但它并不完全匹配。

亚历山大法卡斯( https://github.com/aFarkas/webshim/blob/master/src/shims/form-shim-extend.js#L285 )使用此模式来测试的网址:

/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\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])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\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})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([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})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([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;

此外,刚刚的人谁通过谷歌过这个失蹄,如果你不需要格局,但只是想检查,如果事情通过JavaScript(可能的onChange)是有效的,你可以使用formelement.checkValidity()方法。 显然,这并不用填充工具帮助(假定没有本地HTML5验证支持),但它仍然是有用的。



文章来源: What regular expression does a browsers use for HTML5 input type=url?