我知道有很多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等,它允许我写下这样的废话:
我一直在试图尝试使用不同的组合,但我能理解为什么即使我明确说必须有一个或多个域名扩展,那部分似乎并不重要?
干杯
答案 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?