【问题标题】:URl regex validator HTML5URl 正则表达式验证器 HTML5
【发布时间】:2019-02-19 19:45:10
【问题描述】:

我正在通过正则表达式验证表单上的 url。

^(?:http(s)?://)?[\w.-]+(?:.[\w.-]+)+[\w-._~:/?#[] @!\$&'()*+,;=.]+$

它会验证所有 URL,例如:

  • https://www.example.com
  • http://www.example.com
  • www.example.com
  • example.com
  • http://blog.example.com
  • http://www.example.com/product
  • http://www.example.com/products?id=1&page=2
  • http://www.example.com#up
  • http://255.255.255.255
  • 255.255.255.255


  • 但是,它也会验证像
  • www.google
  • 这样的 URL
  • www.example
  • www.example.
  • www.google.
  • 不被接受的 URL

    我对正则表达式的效率不是很高。请帮助需要更改的内容

    【问题讨论】:

    • 试试^(?!www\.[^.]+$)(?:https?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w._~:/?#[\\\]@!$&'()*+,;=.-]+$ (demo)。
    • 嗨,wiktor 它的工作原理,但它包括 www.google。网址也是如此。也请你帮忙...它不应该包括 www.google 或 www.google。
    • @WiktorStribiżew 谢谢它有效!!
    • www.google 是一个有效的域名。 .google *域在公共互联网上不可用这一事实并不能阻止有权访问自己的名称服务器的人将其设置为本地域名。我认为你需要考虑一下你想接受什么作为有效的 url。

    标签: regex url


    【解决方案1】:

    在 HTML5 pattern 属性中使用正则表达式时,您应该非常小心地转义字符,因为那些实现了 ES6+ 标准的浏览器在“看到”[\w\.-] 时可能会抛出异常(无需转义点,一旦模式是用u 标志编译的,它会变成一个错误)。

    现在,要解决此问题,您可以在^ 之后添加一个(?!www\.[^.]+\.?$) 前瞻,以使所有以www. 开头的输入失败,然后具有除. 之外的任何0 个或多个字符,然后是可选的@ 987654329@ 在字符串的末尾。

    你可以使用

    ^(?!www\.[^.]+\.?$)(?:https?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w._~:/?#[\\\]@!$&'()*+,;=.-]+$
    

    请参阅regex demo。请注意,我在您的模式中同时转义了 \],我认为您的意思是同时匹配两者(您的原始正则表达式与 \ 不匹配 [\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.])。

    请注意,HTML5 pattern 正则表达式默认锚定,您不需要在开始/结束处使用 ^$

    pattern="(?!www\.[^.]+\.?$)(?:https?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w._~:/?#[\\\]@!$&'()*+,;=.-]+"
    

    但如果你愿意,你仍然可以保留它们。

    【讨论】:

    • 我再次需要一点帮助,我遇到了这样一种情况,example.com/ 也在验证,而它不应该...... example.com/product 是正确的,但是 example.com/不是...请帮助克服这种情况