Regular expression to match DNS hostname or IP Address?

后端 未结 21 2544
长发绾君心
长发绾君心 2020-11-21 07:25

Does anyone have a regular expression handy that will match any legal DNS hostname or IP address?

It\'s easy to write one that works 95% of the time, but I\'m hoping

21条回答
  •  既然无缘
    2020-11-21 07:57

    The new Network framework has failable initializers for struct IPv4Address and struct IPv6Address which handle the IP address portion very easily. Doing this in IPv6 with a regex is tough with all the shortening rules.

    Unfortunately I don't have an elegant answer for hostname.

    Note that Network framework is recent, so it may force you to compile for recent OS versions.

    import Network
    let tests = ["192.168.4.4","fkjhwojfw","192.168.4.4.4","2620:3","2620::33"]
    
    for test in tests {
        if let _ = IPv4Address(test) {
            debugPrint("\(test) is valid ipv4 address")
        } else if let _ = IPv6Address(test) {
            debugPrint("\(test) is valid ipv6 address")
        } else {
            debugPrint("\(test) is not a valid IP address")
        }
    }
    
    output:
    "192.168.4.4 is valid ipv4 address"
    "fkjhwojfw is not a valid IP address"
    "192.168.4.4.4 is not a valid IP address"
    "2620:3 is not a valid IP address"
    "2620::33 is valid ipv6 address"
    

提交回复
热议问题