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

有没有人有正则表达式,会匹配任何合法的DNS主机名或IP地址?

编写95%的时间很容易,但我希望能够获得经过良好测试的内容,以便与DNS主机名的最新RFC规范完全匹配。


您可以单独使用以下正则表达式,或者将它们组合为联合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有效的主机名匹配。 根据您使用的语言可能必须用转义。


根据RFC 1123, ValidHostnameRegex有效。最初,RFC 952指定主机名段不能以数字开头。

http://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])$";

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。


要匹配有效的IP地址,请使用以下正则表达式:

(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}

代替:

([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])(.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])){3}

说明

许多正则表达式引擎匹配OR序列中的第一种可能性。 例如,请尝试以下正则表达式:

10.48.0.200

测试

测试好与差之间的差异

链接地址: http://www.djcxy.com/p/92741.html

上一篇: Regular expression to match DNS hostname or IP Address?

下一篇: validate email addresses using a regex.