我需要验证应该像
的网址google.com or
yahoo.co.uk etc
我的意思是我不需要http或www。 我的正则表达式代码是这样的。但它对我不起作用。
/^[a-zA-Z0-9][a-zA-Z0-9-][a-zA-Z0-9]\.[a-zA-Z]{2,}$/
答案 0 :(得分:1)
你当前的正则表达式不起作用,因为它在.
之前只需要三个字符:首先是匹配[a-zA-Z0-9]
的字符,然后是匹配[a-zA-Z0-9-]
的字符,然后是一个字符匹配[a-zA-Z0-9]
。您的正则表达式只允许在输入中的任何位置使用单个.
。
对于可变长度字符串,您需要使用+
或*
或{}
语法,就像使用正则表达式的最后一部分一样。
为了保持基本相同的验证,你似乎正在拍摄,但让它适用于不同的长度,尝试:
/^[A-Z\d-]+(\.[A-Z\d-]+)*\.[A-Z]{2,}$/i
那是:
[A-Z\d-]+
匹配一个或多个字母,数字或连字符,然后是
(\.[A-Z\d-]+)*
零个或多个点后跟一个或多个这些字符的实例,后跟
\.[A-Z]{2,}
带有两个或更多A-Z的最后一个点。
请注意,如果将A-Z
标记添加到正则表达式以使其不区分大小写,则可以使用大写i
范围。
答案 1 :(得分:1)
您的原始模式只允许第一部分不以短划线开头或结尾的网址。如果这很重要,我已经为你做了一个模式。
/^(?:(?!-)[a-z\d-]+[^-]\.)+[a-z]{2,6}$/i
这解决了nnnnn在他的回答中解决的相同问题,但它也不允许url的任何部分以连字符开头或结尾。
我还可以推荐regexpal来实时测试匹配。它使用javascript样式的正则表达式匹配。
将正则表达式放在顶部字段中,将测试数据放在底部。您将需要删除封装它的斜杠。选中“不区分大小写(i)”和“^ line match at line breaks(m)”
框一些测试数据:
google.com
yahoo-.com
www.YAHOO.co.uk
-yahoo.co.uk
http://www.regular-expressions.info/
hey.subdomain.sub.sub.domain.com
co.uk
现在,使用^ $与否之间的区别将证明自己。你会看到一些网址不匹配,即使它们是有效的。多行(m)标志允许您将输入中的每一行视为单独的字符串。我给你的正则表达式只会匹配整个字符串匹配,但有些网址即使有效也是有效的。不区分大小写(i)等于正则表达式末尾的“i”。
尝试删除行开头(^)和行尾($)的锚点,看看它是如何匹配的。
我不确定你是如何运行比赛的,但这值得考虑。
答案 2 :(得分:0)
试试这个:
(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}