我在JS中有这个RegExp,我使用.test()
方法来验证网址:
new RegExp(/^((https|http):\/\/www\.)?(www\.)?[a-z0-9_-]+\.[a-z]+(\/)?(\/[a-z0-9]+(\.(php|html|asp|aspx))?)?$/i)
我想要一个可以验证此类网址的RegExp(注意http和https之类的内容):
https://www.page.com/about.php
https://www.page.com/about
https://www.page.com/
www.page.com
page.com
page-10.com
1234.com
当我尝试这些网址时,此RegExp有效,除非我尝试使用此网址:
www.page
这个网址是真的,我不知道为什么......
我的正则表达式的 第一部分说:网址的开头可能有https|http://www.
或www.
,或者没有。
/^((https|http):\/\/www\.)?(www\.)?
第二部分说:在第一部分之后会有字母,数字,一些符号+ 一个点(这是我的错误来自我认为。为什么它没有不识别点?)+更多字母,结果可能是 page-10.com
[a-z0-9_-]+\.[a-z]+
第三部分是可选的,它允许使用斜杠和扩展名,例如page.com /about.php :
(\/)?(\/[a-z0-9]+(\.(php|html|asp|aspx))?)?$
问题:
在第二部分中,当我说:\.
时,我期待一个点,但是它不能识别它,我怎么能明确并要求它?
答案 0 :(得分:2)
我将正则表达式分解为部分:
^
((https|http):\/\/www\.)? # Match http://www. or https://www. OR NOTHING
(www\.)? # Match www. OR NOTHING
[a-z0-9_-]+\. # Match at least 1 character in group [a-z0-9_-] followed by a dot
[a-z]+(\/)? # Match at least 1 character in group [a-z] followed by "/" OR NOTHING
(\/[a-z0-9]+(\.(php|html|asp|aspx))?)? # Match at least 1 character in group [a-z0-9] followed by a web page file extension OR NOTHING
$
如你所见,那些有" OR NOTHING "没有意义,如果它没有出现在您的测试字符串中。因此,www.page
的测试用例与以下部分匹配:
[a-z0-9_-]+\. # Match at least 1 character in group [a-z0-9_-] followed by a dot
[a-z]+(\/)? # Match at least 1 character in group [a-z] followed by "/" OR NOTHING
然后你就得到了问题的答案:
问题:在第二部分中,当我说:。但是它时,我期待一个点 没有认识到它,我怎么能明确并要求它?
正则表达式的固定版本:
^((https|http):\/\/)?(www\.)?([\w-]{2,}\.[\w-]{2,3}\.[\w-]{2,3}|[\w-]{2,}\.[a-zA-Z]{2,3})(\/[a-z0-9]+(\.(php|html|asp|aspx))?)?$