簡體   English   中英

如何解析包含字符字符的IP地址或主機名?

[英]How to parse IP Address or Host name containing Alpha Characters?

我試圖分離兩種不同類型的字符串,IP地址和DNS地址。 我無法弄清楚如何拆分它。 我最初的想法是:

String stringIP = "123.345.12.1234";
String stringDNS = "iam.adns234.address.com";

if(!Pattern.matches("^[a-zA-Z0-9.]*$",stringDNS)){
    //I only want to get IP type strings here, so I am trying to separate out anything containing alpha characters. `stringDNS` should not be allowed into the if statement.
}

您可以使用以下模式“驗證”您的IP:

String stringIP = "123.345.12.1234";
String stringDNS = "iam.adns234.address.com";
//                | start of input
//                | | 1-4 digits
//                | |      | dot
//                | |      |    | 3 occurrences
//                | |      |    | | 1-4 digits
//                | |      |    | |       | end of input
String pattern = "^(\\d{1,4}\\.){3}\\d{1,4}$";
System.out.println(stringIP.matches(pattern));
System.out.println(stringDNS.matches(pattern));

產量

true
false

注意

這里的驗證是“寬松的”,因為它不會檢查值並且最適合4個數字的項目。

對於更嚴肅的驗證(具有較不易讀的模式的缺點 ),請參閱dasblinkenlight的回答。

public static final String IPV4_REGEX = "\\A(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z";
if(string.matches(IPV4_REGEX)
{
    //....
}

請注意,您發布的“123.345.12.1234”的IP地址不是有效的IPV4地址。

您的實現將允許通過一些不代表數字IP地址的字符串。 最好使用僅通過有效數字IP地址的正則表達式。 正則表達式取自這里 它有點復雜,因為它需要確保多位數字低於256,但它是驗證數字IP地址的可靠方法:

String IPADDRESS_PATTERN = 
    "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
if(Pattern.matches(IPADDRESS_PATTERN, stringIP)) {
    ...
}

驗證域String是一項更復雜的任務,如果您不介意,可以在項目中添加一個額外的輕量級apache commons庫。

看看DomainValidator.isValid(String)

請注意,此方法還會檢查有效的公認頂級域名(.com,.org等)。

要驗證IP地址,請查看InetAddressValidator.isValidInet4Address(String)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM