我知道有很多用于 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() 的测试用例
- http://www.stackoverflow.com -> 真
- http://stackoverflow.com -> 真
- https://stackoverflow.com -> 真
- htts://stackoverflow.com -> 假
- http://stackoverflow.com -> 假
然而,即使我明确告诉正则表达式它必须匹配 .com 或 .co.uk 等,它也允许我写这样的废话:
- http://www.stackoverflow -> true(错误)
- http://www.stackoverflow。-> 真(错误)
- http://www.stackoverflow.c -> true(错误)
我一直在绞尽脑汁尝试不同的组合,但我能理解为什么即使我明确说必须有一个或多个域扩展,那部分似乎并不重要?
干杯