繁体   English   中英

用于验证 URL 或域名的正则表达式。

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM