JavaScript 中的主机名 url 正则表达式
Host name url regex in JavaScript
我知道有很多正则表达式用于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() 的测试用例
- http://www.stackoverflow.com ->真实
- http://stackoverflow.com ->真实
- https://stackoverflow.com ->真实
- htts://stackoverflow.com -> 假
- http:/stackoverflow.com -> false
但是,即使我明确告诉正则表达式它必须与.com或 .co.uk 等匹配,它也允许我写这样的废话:
- http://www.stackoverflow -> 正确(错误)
- http://www.stackoverflow. -> 真(错)
- http://www.stackoverflow.c -> 真(错)
我一直在绞尽脑汁尝试不同的组合,但我可以理解为什么即使我明确表示必须有一个或多个域扩展,那部分似乎并不重要?
干杯
如果要尝试验证字符串,则需要将其锚定到字符串的开头和结尾:
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
。
技巧:
-
{1}
不是必需
的 -
{0,1}
相当于?
- 由于您没有使用任何捕获,因此
(s?)
可能只是s?
相关文章:
- 通过正则表达式从字符串中提取Url
- 用于确定URL视频ID的正则表达式
- url正则表达式不适用于javascript中的localhost
- JavaScript 中 URL 的正则表达式模式
- 什么'用这个正则表达式查找URL是错误的
- 修改以下正则表达式,使其在URL末尾包含斜杠
- javascript正则表达式url(url子字符串)
- JavaScript 中的主机名 url 正则表达式
- 为Javascript优化Gruber URL正则表达式
- 我的URL正则表达式允许空格但不应该't
- 不能让John Gruber' 2014更新的url正则表达式模式在Javascript中工作
- Javascript url正则表达式
- PHP+JAVASCRIPT url正则表达式与GET参数
- 替换URL正则表达式
- 检查url正则表达式的一部分
- NodeJS中的URL正则表达式问题
- Javascript URL正则表达式问题
- Url正则表达式不正确
- API 调用的 URL 正则表达式
- 新的tweet url正则表达式,用于正确的字符计数