有效网址的正则表达式

时间:2013-05-02 11:55:21

标签: javascript regex

我需要验证应该像

的网址
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,}$/

3 个答案:

答案 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}