regex - 浏览器对 HTML5 input type=url 使用什么正则表达式?

标签 regex html validation url input

我正在研究 HTML5 输入模式 polyfill,我正在尝试像浏览器 (Chrome) 一样在 JavaScript 中验证输入类型=url,但找不到任何关于 JavaScript 或 PERL 兼容正则表达式的文档.由于它是一个 polyfill,我并不特别介意它是否完全匹配所有 URL(这是不可能的),而是它模仿浏览器的工作方式。

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

谢谢

最佳答案

在 GitHub 上搜索了几个 HTML5 shivs 以查看是否有其他人遇到过理想的表达方式后,我相信我找到了一些非常接近但并不完全匹配的东西。

Alexander Farkas ( https://github.com/aFarkas/webshim/blob/master/src/shims/form-shim-extend.js#L285) 使用此模式测试 URL:

/^([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;

此外,对于通过 Google 偶然发现此问题的任何人来说,如果您不需要该模式,而只是想通过 JavaScript(可能是 onChange)检查某些内容是否有效,您可以使用 formelement.checkValidity() 方法。显然这对 polyfill 没有帮助(假设没有原生 HTML5 验证支持)但它仍然很有用。

关于regex - 浏览器对 HTML5 input type=url 使用什么正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626293/

相关文章:

regex - 使用 Select-String 匹配多个单行模式并写入输出

java - 正则表达式在Java中获取两个标签之间的结果

javascript - Flash Canvas 响应动画大小

jquery - 阻止图像适合移动设备的屏幕

javascript - Onsubmit 验证更改背景必填字段?

javascript - jquery 输入验证

regex - 在 haskell 函数保护中使用正则表达式

regex - 通过 linux shell 执行文本

javascript - 可拖动的屏幕左侧(JQuery)

Android手动X509证书链验证