JavaScript 中 URL 的正则表达式模式

regex pattern for URL in javascript

本文关键字:正则表达式 模式 URL JavaScript      更新时间:2023-09-26

我使用以下URL正则表达式模式进行URL验证。

/[-a-zA-Z0-9@:%_'+.~#?&//=]{2,256}'.[a-z]{2,4}'b('/[-a-zA-Z0-9@:%_'+.~#?&//=]*)?/gi;

但我需要排除.comhttp://google/应该工作。

为此需要做哪些改变?

你最好使用jquery.validate.js扩展名中的这个长度表达式。这经过充分测试,支持多语言网址。不要害怕表达式中的 unicode 和十六进制表达式。它只支持多语言网址。请参阅此内容(Unicode 字符)以了解以下 unicode 的含义

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

您上面的表达式有很多缺陷,例如表达式的最后一部分'b('/[-a-zA-Z0-9@:%_'+.~#?&//=]*)?其本身与整个 url 匹配,并且对前一个表达式没有任何影响

假设你想要所有内容,包括没有.com的URL。

/[-a-zA-Z0-9@:%_'+.~#?&//=]{2,256}
(?:'.[a-z]{2,4})? // (?:) match group this is where the .com is captured
                  // ? quantifier 0 to 1 times
'b('/[-a-zA-Z0-9@:%_'+.~#?&//=]*)?/gi

吉斯菲德尔

只需将本节:'.[a-z]{2,4}替换为 ('.[a-z]{2,4})?

完整的正则表达式:

[-a-zA-Z0-9@:%_'+.~#?&//=]{2,256}('.[a-z]{2,4})?'b('/[-a-zA-Z0-9@:%_'+.~#?&//=]*)?

还有一个demo.

实际上,我们在这里所做的是使.xxxx成为可选的,方法是将其包装在()中并使用?来表示非贪婪状态。

这将同时匹配:

http://www.google.com/

http://localhost/

警告:这不是完成您想要的事情的最有效表达方式,但它只是完成您想要的事情所需的最小调整。