正则表达式以验证URL或域名。

时间:2011-05-23 18:51:54

标签: c# javascript regex

有人可以让我知道我的正则表达式有什么问题吗?我只想验证URL的开头,主要是主机名(即www.yahoo.com)。

Regular Expression: ^(((ht|f)tp(s?))\:\/\/)?(www.)?([a-zA-Z0-9\-\.]{1,63})+\.([a-zA-Z]{2,5})$

Testing Values:

test.com – passes

test.c2om – fails 

test.test.com – passes

test.test.c2om – fails 

test.test.test.com – passes 

test.test.test.c2om – INVALID REGEX PATTERN 

这应该返回false,而是返回任何内容,使用javascript和c#...如果你删除了对子域大小的{1,63}限制,它就可以...

1 个答案:

答案 0 :(得分:5)

您已创建catastrophic pattern - 引擎将尝试以多种方式匹配([a-zA-Z0-9\-\.]{1,63})+,直至失败。一个简单的解决方案是删除{1,63},正如您所指出的那样,它似乎并没有添加任何内容。
另一个选择是使用点作为锚点,因此你不能在它们之间回溯(这只会给你一种方法来匹配文本,并且可以说,你正在尝试做什么):

([a-zA-Z0-9\-]{1,63}\.)*[a-zA-Z0-9\-]{1,63}

请记住,在域名中假设所有ASCII-English字母不再是非常正确的。例如,http://אתר.קום是合法(且有效)的网址。