Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对URL使用regex,但一直失败_Javascript_Regex - Fatal编程技术网

Javascript 对URL使用regex,但一直失败

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-

我有一个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-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.
  • (?:[\w-]+\)+
    -1次或多次重复:
    • [\w-]+
      -1个或多个字母、数字或
      \u
    • \。
      -一个点
  • [a-z]+
    -1+小写ASCII字母
  • (?:\/[\w#-]+)*
    -0或更多次重复:
    • \/
      -a
      /
      字符
    • [\w#-]+
      -1个或多个字母、数字、
      -`
  • \/?
    -可选的
    /
  • $
    -字符串结束

这很管用,你能解释一下为什么这两者之间存在差异,以防其他人遇到同样的问题吗