【问题标题】:Regular Expression to validate a URL or domain name.用于验证 URL 或域名的正则表达式。
【发布时间】:2011-05-23 18:51:53
【问题描述】:

有人可以告诉我我的正则表达式有什么问题吗?我试图验证 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} 限制,它就可以工作...

【问题讨论】:

    标签: c# javascript regex


    【解决方案1】:

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

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

    请记住,假设域名中的全是 ASCII 英文字母已经不太正确了。例如,http://אתר.קום 是一个合法(有效的)网址。

    【讨论】:

      最近更新 更多