JAVA IP地址格式验证,使用正则表达式

正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

元字符

由于 \ 和 " 或者 ’ 组合无法显示出来,所以下面的内容尽可能的加了一个空格。还有 | 这个字符也是无法显示出来,用 l 代替了。

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ’ \ \ ’ 匹配 " \ " 而 “\ (” 则匹配 " ("。
^ 匹配输入字符串的开始位置。
$ 匹配输入字符串的结束位置。
{n} n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
. 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像"(.I\n)"的模式。
(pattern) 匹配 pattern 并获取这一匹配 。
xly 匹配 x 或 y。例如,‘zlfood’ 能匹配 “z” 或 “food”。’(zlf)ood’ 则匹配 “zood” 或 “food”。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
\d 匹配一个数字字符。等价于 [0-9]。

当然不止上面那么少的元字符,只列出来用到的,还有很多元字符,包括普通字符、非打印字符、特殊字符、限定符、定位符等。如果想要了解更多关于这方面的知识,可以点这里。正则表达式 - 教程

JAVA IP地址格式验证

首先需要了解IP地址的数字范围:

  • A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。

A类IP地址范围:1.0.0.1-126.255.255.254

  • B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。

B类IP地址范围:128.1.0.1-191.254.255.254

  • C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。

C类IP地址范围:192.0.1.1-223.255.254.254

  • D类IP地址在历史上被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。

D类IP地址范围:224.0.0.1-239.255.255.255

特殊的网址:

  1. 每一个字节都为0的地址(“0.0.0.0”)对应于当前主机
  2. IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址
  3. IP地址中凡是以“11110”开头的E类IP地址都保留用于将来和实验使用
  4. IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.255.255.255用于回路测试,如:127.0.0.1可以代表本机IP地址,用“http://127.0.0.1”就可以测试本机中配置的Web服务器
  5. 网络ID的第一个6位组也不能全置为“0”,全“0”表示本地网络

好了,入正题。根据上面所列出来的IP地址范围,去掉0.0.0.0这个特殊的主机地址,然后就可以确定第1段地址数值范围1-255,第2、3、4段地址数值范围0-255。

  • 将第1段分成5部分:1 - 9 ,10 - 99, 100 - 199, 200 - 249, 250 - 255。
数值范围 正则表达式
1-9 [1-9]
10-99 [1-9]\d
100-199 1\d{2}
200-249 2[0-4]\d
250-255 25[0-5]

So,将上面的正则表达式用 | 连起来就是第1段地址的正则表达式:

([1-9]|[1-9]\d|1\d{
     2}|2[0-4]\d|25[0-5])
  • 第2、3、4段地址拆分其实跟第1段差不多,有两个不同的地方:①数值可以为0;②将"."放到第2、3、4段地址前面。
数值范围 正则表达
0-9 \d
10-99 [1-9]\d
100-199 1\d{2}
200-249 2[0-4]\d
250-255 25[0-5]

还有".“的正则表达式:”\."
So,将上面的正则表达式用 | 连起来就是第2、3、4段地址的正则表达式:

(\d|[1-9]\d|1\d{
     2}|2[0-4]\d|25[0-5])

由于将"."加到了地址前面,所以正则表达式为:

(\.(\d|[1-9]\d|1\d{
     2}|2[0-4]\d|25[0-5]))

由于第2、3、4段地址数值范围是一样的,所以正则表达式为:

(\.(\d|[1-9]\d|1\d{
     2}|2[0-4]\d|25[0-5])){
     3}

Just do it!将上面第1段和2、3、4段正则表达式连起来就是IP地址的正则表达式了:

^([1-9]|[1-9]\d|1\d{
     2}|2[0-4]\d|25[0-5])(\.(\d|[1-9]\d|1\d{
     2}|2[0-4]\d|25[0-5])){
     3}$

以"^“开始,以”$"结束。

JAVA代码实现:

public static boolean isValidIPAddress(String ipAddress) {
     
        if ((ipAddress != null) && (!ipAddress.isEmpty())) {
     
            return Pattern.matches("^([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}$", ipAddress);
        }
        return false;
    }

你可能感兴趣的:(Java,正则表达式,java,字符串)