Javascript 对URL使用regex,但一直失败
我有一个URL,我正在使用,并试图验证它与一些正则表达式,它不断失败,我不知道为什么这是Javascript 对URL使用regex,但一直失败,javascript,regex,Javascript,Regex,我有一个URL,我正在使用,并试图验证它与一些正则表达式,它不断失败,我不知道为什么这是 let a = "https://cdn-myCdn.azure.net/send-to-home4/"; let re = /^((https?|ftp|smtp):\/\/)?(www.)?[a-z0-9]+\.[a-z]+(\/[a-zA-Z0-9#]+\/?)*$/; return re.test(a); 我已尝试删除www。但仍然失败主要问题是,您的字符类与连字符、[a-z0-9]和[a-zA-
let a = "https://cdn-myCdn.azure.net/send-to-home4/";
let re = /^((https?|ftp|smtp):\/\/)?(www.)?[a-z0-9]+\.[a-z]+(\/[a-zA-Z0-9#]+\/?)*$/;
return re.test(a);
我已尝试删除www。但仍然失败主要问题是,您的字符类与连字符、
[a-z0-9]
和[a-zA-z0-9#]
不匹配,而您的输入包含它们。另一个主要问题是[a-z0-9]+\.[a-z]+
模式不允许URL的域部分中有多个点,您需要将[a-z0-9]+\.
部分放入一个组中,并为该组设置一个+
量词。请注意,[a-z0-9]
不允许大写字母,URL中有大写字母
还请注意,www.
匹配www
和除换行符以外的任何字符,您需要转义点
因此,一个可能的变化,将为你工作是
/^(?:(?:https?|ftp|smtp):\/\/)?(?:www\.)?(?:[\w-]+\.)+[a-z]+(?:\/[\w#-]+)*\/?$/
见
注意:这仍然是一个非常严格的URL模式,只有在您知道所有需要验证的URL满足以下条件时才使用它:
-字符串的开头^
-可选的(?:(?:https?;ftp | smtp):\/\/)
、http
、https
或ftp
,后跟smtp
:/
-可选字符序列,(?:www\)?
www.
-1次或多次重复:(?:[\w-]+\)+
-1个或多个字母、数字或[\w-]+
\u
-一个点\。
-1+小写ASCII字母[a-z]+
-0或更多次重复:(?:\/[\w#-]+)*
-a\/
字符/
-1个或多个字母、数字、[\w#-]+
、
或
-`
-可选的\/?
/
-字符串结束$