[英]Regular Expression to validate a URL or domain name.
有人可以让我知道我的正则表达式有什么问题吗? 我试图验证 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} 限制,它可以工作...
您创建了一个灾难性模式- 引擎将尝试以多种方式匹配([a-zA-Z0-9\-\.]{1,63})+
直到失败。 一个简单的解决方案是删除{1,63}
,正如您所指出的,它似乎并没有添加任何东西。
另一种选择是使用点作为锚点,因此您不能在它们之间回溯(这只为您提供了一种匹配文本的方法,并且假设您正在尝试做的事情):
([a-zA-Z0-9\-]{1,63}\.)*[a-zA-Z0-9\-]{1,63}
请记住,在域名中假设全 ASCII 英文字母不再是非常正确的。 例如http://אתר.קום
是合法的(且有效的)url。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.