我正在构建可以与网址匹配的网站验证器正则表达式。
事实是,它有90%可行!问题出在我的字符串匹配中。
我的正则表达式:(http(s?):// www。| www。| http(s?)://)+ [a-z0-9] +([-。] {1} [a-z0-9] +)。[az] {2,5}(:[0-9] {1,5})?(/。)? >
我要测试的字符串:
1)(应该会失败,但是会通过) https://www.xy
2)(应该通过,确实如此)https://www.xy.com
它一直进入我的组(http(s?)://),而不是组((http(s?):// www。)
关于如何解决此问题的任何想法?
我要传递的URL:
我要失败的网址: http://www.bla https://www.ggg
因此,如果它与https://www相匹配。或http://www。应该使用正确的组,然后将其余的正则表达式应用到检查是否包含.. test.com等的地方。
答案 0 :(得分:1)
您可以使用
^(?:https?:\/\/)?(?!www\.[^.]+$)(?:www\.)?[a-z0-9]+(?:[-.][a-z0-9]+)*\.[a-z]{2,5}(?::[0-9]{1,5})?(\/.*)?$
请参见regex demo
详细信息
^
-字符串的开头(?:https?:\/\/)?
-可选的http://
或https://
(?!www\.[^.]+$)
-如果在当前位置的右边立即有www.
,然后是字符串末尾除点以外的任何1+个字符,则负匹配将使匹配失败(?:www\.)?
-可选的www.
[a-z0-9]+
-1个以上的小写字母和数字(?:[-.][a-z0-9]+)*
-重复-
或.
零次或更多次,然后再输入1+小写字母和数字\.
-一个.
[a-z]{2,5}
-两到五个小写字母(?::[0-9]{1,5})?
-:
和1到5位数字的可选序列(\/.*)?
-/
和行的其余部分的可选序列$
-字符串的结尾。