匹配DNS主机名或IP地址的正则表达式?

24 浏览
0 Comments

匹配DNS主机名或IP地址的正则表达式?

有人有一个正则表达式可以匹配任何合法的DNS主机名或IP地址吗?

编写一个可以95%起效的正则表达式很容易,但我希望得到一个经过充分测试、完全符合DNS主机名的最新RFC规范的表达式。

admin 更改状态以发布 2023年5月24日
0
0 Comments

smink的主机名正则表达式没有遵守主机名中各标签长度限制。每个有效主机名中的标签长度不应超过63个八位字节。

ValidHostnameRegex="^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])\
(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$"

请注意,第一行末尾的反斜杠是Unix shell语法,用于换行。它不是正则表达式的一部分。

这里仅给出正则表达式本身的单行形式:

^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$

您还应分别检查主机名的总长度不应超过255个字符。更多信息,请参考RFC-952和RFC-1123。

0
0 Comments

您可以单独使用以下正则表达式,也可以将它们组合在一起使用,作为一个OR表达式。

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";

ValidIpAddressRegex 匹配有效的IP地址,而 ValidHostnameRegex 则匹配有效的主机名。取决于您使用的语言,\可能需要用\进行转义。


ValidHostnameRegex 按照 RFC 1123 中的指定是有效的主机名。最初,RFC 952 规定了主机名段不能以数字开头。

https://en.wikipedia.org/wiki/Hostname

最初的主机名规范在RFC 952中指定,规定标签不能以数字或连字符开头,且不能以连字符结尾。 然而,后来的规范(RFC 1123)允许主机名标签以数字开头。

Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";

0