gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:29:05 31 4
gpt4 key购买 nike

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

最佳答案

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

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

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

关于c# - 用于验证 URL 或域名的正则表达式。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101541/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com