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

时间:2013-09-08 23:10:16

标签: javascript regex

我知道有很多RegExs用于URL等,但我真的很难过为什么这个不会工作。我正在努力确保用户的条目是一个合适的网站,允许使用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()

的以下测试用例

然而,即使我明确告诉正则表达式它必须匹配.com或.co.uk等,它允许我写下这样的废话:

我一直在试图尝试使用不同的组合,但我能理解为什么即使我明确说必须有一个或多个域名扩展,那部分似乎并不重要?

干杯

1 个答案:

答案 0 :(得分:4)

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

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)

对于www.stackoverflow,第一组不匹配(因为您说它是可选的),然后第二组匹配www,第三组匹配.stacko。< / p>

提示:

  • {1}没有必要
  • {0,1}相当于?
  • 由于您未使用任何捕获,(s?)可能只是s?