寻找主机名/机器名验证的正则表达式/代码
Posted
技术标签:
【中文标题】寻找主机名/机器名验证的正则表达式/代码【英文标题】:Looking for regex/code for hostname/machine name validation 【发布时间】:2011-06-06 10:02:30 【问题描述】:寻找主机名验证正则表达式。
Regular expression to match DNS hostname or IP Address?
在那个链接中,先生们提出了一个不错的正则表达式。我对此有一些问题/疑问:
在 windows 计算机/网络名称上 像1abcd
是允许的(验证在
我们的本地网络)
在建议的正则表达式中,点可能只出现一次。我假设
abc.def.gh
是一个有效的主机名
不是吗。
奇怪,但也找不到任何可以验证主机名字符串的 .NET 类(是这种情况吗?)。任何建议将不胜感激。
更新:对于任何类/方法提案 - 请提供适用于 .NET/C# 和 SilverLight 的建议。
【问题讨论】:
【参考方案1】:在建议的正则表达式中,点可能 只出现一次。我会假设 abc.def.gh 是一个有效的主机名 好吧,不是吗。
圆点可能出现不止一次。测试正则表达式here,你会看到它匹配。
正则表达式的相关片段(第一部分是):
([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*
在 Windows 计算机/网络名称上 像 1abcd 是允许的(验证于 我们的本地网络)
来自wikipedia:
原始规格 RFC 952 中的主机名,强制要求 标签不能以数字开头或 带有连字符,并且不能以 a 结尾 连字符。然而,随后的 规范 (RFC 1123) 允许 主机名标签以数字开头。
我提到了RFC 952。我将尝试更新主机名的正则表达式以符合RFC 1123。
【讨论】:
另一件需要考虑的事情是,段的长度不能超过 63 个字符,并且整个主机名的长度不能超过 253 个字符。【参考方案2】:Uri.CheckHostName 是一种可以帮助您的方法吗? 如果主机名无法识别,结果将是"Unknown"。
【讨论】:
直到今天早上,那个方法名称对我来说看起来很有希望。但是,像“9999999”这样的名称通过(应该吗?)。像“1.3”这样的名字也会通过(他们应该吗?)。 根据我对wikipedia的理解,这似乎是有效的主机名 该方法在 Silverlight 中不起作用,代码也应该服务于 SL 平台。 我会在 Silverlight 中看到 Dns.GetHostEntry(但从不使用)。如果它不是有效的主机名,它会解析主机名并启动 ArgumentException。右边还有另一个问题validate hostname string in Python,这个正则表达式 "(?!-)[A-Z\d-]1,63(? 【参考方案3】:(?i)(?=.5,20$)^(([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])\.)*([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])$
解释:
(?i)
- 忽略大小写
(?=.5,20$)
- 将字符串长度限制在 5 到 20 个字符内。
^(([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])\.)*([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])$
- 接受任何字母和数字以及连字符和点
【讨论】:
以上是关于寻找主机名/机器名验证的正则表达式/代码的主要内容,如果未能解决你的问题,请参考以下文章