Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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正则表达式_Javascript_Regex - Fatal编程技术网

JavaScript中的主机名url正则表达式

JavaScript中的主机名url正则表达式,javascript,regex,Javascript,Regex,我知道有很多用于URL等的正则表达式,但我真的很困惑为什么这一个不起作用。我试图确保用户的条目是一个正确的网站,允许www或不允许www var pattern = /http(s?):\/\/ (http:// or https://) (?:[a-zA-Z]+\.){0,1} (0 or 1 instance of www) (?:[a-zA-Z0-9][a-zA-Z0-9-]+){1} (1 instance

我知道有很多用于URL等的正则表达式,但我真的很困惑为什么这一个不起作用。我试图确保用户的条目是一个正确的网站,允许www或不允许www

var pattern = 
/http(s?):\/\/                      (http:// or https://)
(?:[a-zA-Z]+\.){0,1}                (0 or 1 instance of www)
(?:[a-zA-Z0-9][a-zA-Z0-9-]+){1}     (1 instance of a domain name)
(?:\.[a-zA-Z]{2,6})+/;              (1 or more instance of .com or .co.uk)
它使用pattern.test()适用于以下测试用例

  • ->对
  • ->对
  • ->对
  • htts://stackoverflow.com ->假的
  • http:/stackoverflow.com->false
然而,即使我明确告诉regex它必须与.com或.co.uk等匹配,它也允许我写一些废话,比如:

  • ->正确(错误)
  • .->对(错)
  • ->正确(错误)
我一直在绞尽脑汁尝试不同的组合,但我能理解为什么即使我明确地说必须有一个或多个域扩展,那部分似乎并不重要

干杯

如果您试图验证字符串,则需要将其锚定到字符串的开头和结尾:

var pattern = 
/^http(s?):\/\/                      (http:// or https://)
(?:[a-zA-Z]+\.){0,1}                (0 or 1 instance of www)
(?:[a-zA-Z0-9][a-zA-Z0-9-]+){1}     (1 instance of a domain name)
(?:\.[a-zA-Z]{2,6})+$/;              (1 or more instance of .com or .co.uk)
var模式=
/^http(s?):\/\/(http://或https://)
(?:[a-zA-Z]+\){0,1}(www的0或1个实例)
(?:[a-zA-Z0-9][a-zA-Z0-9-]+){1}(域名的一个实例)
(?:\[a-zA-Z]{2,6})+$/;(1个或多个.com或.co.uk实例)
对于
www.stackoverflow
,第一组不匹配(因为您说它是可选的),然后第二组匹配
www
,第三组匹配
。stacko

小贴士:

  • {1}
    不是必需的
  • {0,1}
    等同于
  • 由于您没有使用任何捕获,
    (s?
    可能只是
    s?
如果试图验证字符串,则需要将其锚定到字符串的开头和结尾:

var pattern = 
/^http(s?):\/\/                      (http:// or https://)
(?:[a-zA-Z]+\.){0,1}                (0 or 1 instance of www)
(?:[a-zA-Z0-9][a-zA-Z0-9-]+){1}     (1 instance of a domain name)
(?:\.[a-zA-Z]{2,6})+$/;              (1 or more instance of .com or .co.uk)
var模式=
/^http(s?):\/\/(http://或https://)
(?:[a-zA-Z]+\){0,1}(www的0或1个实例)
(?:[a-zA-Z0-9][a-zA-Z0-9-]+){1}(域名的一个实例)
(?:\[a-zA-Z]{2,6})+$/;(1个或多个.com或.co.uk实例)
对于
www.stackoverflow
,第一组不匹配(因为您说它是可选的),然后第二组匹配
www
,第三组匹配
。stacko

小贴士:

  • {1}
    不是必需的
  • {0,1}
    等同于
  • 由于您没有使用任何捕获,
    (s?
    可能只是
    s?

回答得很好!谢谢你的提示,这非常有效!回答得好!谢谢你的提示,这非常有效!