用于网站或网址验证的正则表达式

Dhe*_*wal 11 javascript regex validation

我知道这是一个很常见的问题,有很多答案,但我的问题不同,我想接受以下所有格式的网址:

http://www.sample.com
https://www.sample.com
http://www.sample.com/xyz
www.sample.com
www.sample.com/xyz/#/xyz
sample.com

// & much more ...
Run Code Online (Sandbox Code Playgroud)

所以这里的想法是,我允许用户进入那里的网站和另一个用户可以点击已保存的网站并转到用户网站.因此,限制用户输入正确的URL并不是一个好主意,他们可以输入上述任何格式.这是我正在使用的正则表达式,但只检查URL是否从正确的协议开始:

^(ftp|http|https):\/\/[^ "]+$
Run Code Online (Sandbox Code Playgroud)

Sag*_*r V 25

使用正则表达式 ^((https?|ftp|smtp):\/\/)?(www.)?[a-z0-9]+\.[a-z]+(\/[a-zA-Z0-9#]+\/?)*$

这是我刚才建立的基本版本.谷歌搜索可以给你更多.

这里

  • ^应该从
  • ((HTTPS | FTP | SMTP)://)?可能包含也可能不包含任何这些协议
  • (万维网.)?可能有也可能没有www.
  • [a-z0-9] +(.[az] +)url和域以及子域(如果有的话)最多2个级别
  • (/ [A-ZA-Z0-9#] + /?)*/?可以包含文件的路径,但不是必需的.最后可能包含一个/
  • $应该在那里结束

var a=["http://www.sample.com","https://www.sample.com/","https://www.sample.com#","http://www.sample.com/xyz","http://www.sample.com/#xyz","www.sample.com","www.sample.com/xyz/#/xyz","sample.com","sample.com?name=foo","http://www.sample.com#xyz","http://www.sample.c"];
var re=/^((https?|ftp|smtp):\/\/)?(www.)?[a-z0-9]+(\.[a-z]{2,}){1,3}(#?\/?[a-zA-Z0-9#]+)*\/?(\?[a-zA-Z0-9-_]+=[a-zA-Z0-9-%]+&?)?$/;
a.map(x=>console.log(x+" => "+re.test(x)));
Run Code Online (Sandbox Code Playgroud)

  • 嗨,为了支持像 `https://code.tutsplus.com/tutorials/8-regular-expressions-you-should-know--net-6149` 这样的 URL,我认为你应该改变 `(#?\/?[ a-zA-Z0-9#]+)` 到 `(#?\/?[a-zA-Z0-9-_#]+)` (3认同)
  • 添加了对 http://www.sample.com# 的支持 (2认同)
  • 这不支持。www.google.co.in (2认同)
  • 这不支持像“https://web-site.com”或“https://www.web-site.com”这样的 URL (2认同)

Riz*_*man 6

您可以尝试以下方法:

^((ftp|http|https):\/\/)?(www.)?(?!.*(ftp|http|https|www.))[a-zA-Z0-9_-]+(\.[a-zA-Z]+)+((\/)[\w#]+)*(\/\w+\?[a-zA-Z0-9_]+=\w+(&[a-zA-Z0-9_]+=\w+)*)?$
Run Code Online (Sandbox Code Playgroud)

更新的演示

^((ftp|http|https):\/\/)?(www.)?(?!.*(ftp|http|https|www.))[a-zA-Z0-9_-]+(\.[a-zA-Z]+)+((\/)[\w#]+)*(\/\w+\?[a-zA-Z0-9_]+=\w+(&[a-zA-Z0-9_]+=\w+)*)?$
Run Code Online (Sandbox Code Playgroud)