有人有方便的正则表达式来匹配任何合法的 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 有效的主机名。根据您使用的语言,\可能必须用\进行转义。
<小时/>ValidHostnameRegex 根据 RFC 1123 有效。本来RFC 952指定主机名段不能以数字开头。
http://en.wikipedia.org/wiki/Hostname
The original specification of hostnames in RFC 952, mandated that labels could not start with a digit or with a hyphen, and must not end with a hyphen. However, a subsequent specification (RFC 1123) permitted hostname labels to start with digits.
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])$";
关于regex - 匹配 DNS 主机名或 IP 地址的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/106179/