驗證合法IPV4和IPV6
阿新 • • 發佈:2019-02-05
import java.util.regex.Pattern; public class Main { public static void main(String[] args) { System.out.println(new Main().isIPv4(".13.13.14"));//false System.out.println(new Main().isIPv4("123..13.14"));//false System.out.println(new Main().isIPv4("123.13.013.14"));//true System.out.println(new Main().isIPv4("123.13.413.14"));//false System.out.println(new Main().isIPv4("123.13.00.14"));//true System.out.println(new Main().isIPv4("123.13.13*14"));//false System.out.println(new Main().isIPv4("123.13.13.14"));//true System.out.println(new Main().isIPv6("1234:123A:234D:5678:1234:123A:234D:5678"));//true System.out.println(new Main().isIPv6(":123A:234D:5678:1234:123A:234D:5678"));//false System.out.println(new Main().isIPv6("1234:123A::123A:234D:5678"));//true }//main //^ 匹配輸入字串的開始位置。如果設定了 RegExp 物件的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之後的位置。 //$ 匹配輸入字串的結束位置。如果設定了RegExp 物件的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。 //? 匹配前面的子表示式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等價於 {0,1}。 //{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。 //{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。 //* 匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 \*。 // [a-z] 字元範圍。匹配指定範圍內的任意字元。例如,'[a-z]' 可以匹配 'a' 到 'z' 範圍內的任意小寫字母字元。可以匹配0個或多個 // + 匹配前面的子表示式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。 public boolean isIPv4(String str) { if (!Pattern.matches("[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+", str)) return false; else { String[] arrays = str.split("\\.");// 這裡的 \\ 不能少 if (Integer.parseInt(arrays[0]) < 256 && arrays[0].length() <= 3 && Integer.parseInt(arrays[1]) < 256 && arrays[1].length() <= 3 && Integer.parseInt(arrays[2]) < 256 && arrays[2].length() <= 3 && Integer.parseInt(arrays[3]) < 256 && arrays[3].length() <= 3) return true; else return false; } } public boolean isIPv6(String str) { return isIPV6Std(str) || isIPV6Compress(str); } public boolean isIPV6Std(String str) { if (!Pattern.matches("^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$", str)) return false; return true; } public boolean isIPV6Compress(String str) { if (!Pattern.matches( "^((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)$", str)) return false; return true; } }