返回

正则表达式教程:子网掩码校验

正则表达式

一、正则解释

正则表达式:/^(254|252|248|240|224|192|128).0.0.0|255.(254|252|248|240|224|192|128|0).0.0|255.255.(254|252|248|240|224|192|128|0).0|255.255.255.(255|254|252|248|240|224|192|128|0)$/

  • ^: 行的开头
  • 254|252|248|240|224|192|128: 子网掩码第一组可能的值
  • .: 匹配一个句点
  • 0.0.0: 子网掩码的其余部分,一直到第一个 0
  • |: 或者
  • 255.(254|252|248|240|224|192|128|0).0.0: 第二组可能的子网掩码值
  • |: 或者
  • 255.255.(254|252|248|240|224|192|128|0).0: 第三组可能的子网掩码值
  • |: 或者
  • 255.255.255.(255|254|252|248|240|224|192|128|0)$: 第四组可能的子网掩码值
  • $: 行的结尾

二、使用场景

此正则表达式用于验证子网掩码的有效性。子网掩码用于将 IP 地址划分为网络部分和主机部分。此正则表达式将接受以下格式的子网掩码:

  • 255.255.255.0
  • 255.255.255.255
  • 255.240.0.0

三、代码示例

JavaScript

const regex = /^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/;

const subnetMasks = ['255.255.255.0', '255.255.255.255', '255.240.0.0'];

for (const subnetMask of subnetMasks) {
  console.log(`${subnetMask} is ${regex.test(subnetMask) ? 'valid' : 'invalid'}`);
}

Java

import java.util.regex.Pattern;

public class SubnetMaskValidator {

    public static void main(String[] args) {
        String regex = "^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(255|254|252|248|240|224|192|128|0)
import java.util.regex.Pattern;

public class SubnetMaskValidator {

    public static void main(String[] args) {
        String regex = "^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(255|254|252|248|240|224|192|128|0)$";

        String[] subnetMasks = {"255.255.255.0", "255.255.255.255", "255.240.0.0"};

        for (String subnetMask : subnetMasks) {
            boolean isValid = Pattern.matches(regex, subnetMask);
            System.out.println(subnetMask + " is " + (isValid ? "valid" : "invalid"));
        }
    }
}
quot;
; String[] subnetMasks = {"255.255.255.0", "255.255.255.255", "255.240.0.0"}; for (String subnetMask : subnetMasks) { boolean isValid = Pattern.matches(regex, subnetMask); System.out.println(subnetMask + " is " + (isValid ? "valid" : "invalid")); } } }

PHP

<?php

$regex = "/^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/";

$subnetMasks = ['255.255.255.0', '255.255.255.255', '255.240.0.0'];

foreach ($subnetMasks as $subnetMask) {
    $isValid = preg_match($regex, $subnetMask);
    echo "$subnetMask is " . ($isValid ? 'valid' : 'invalid') . "\n";
}

Python

import re

regex = r"^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)
import re

regex = r"^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$"

subnetMasks = ['255.255.255.0', '255.255.255.255', '255.240.0.0']

for subnetMask in subnetMasks:
    is_valid = bool(re.match(regex, subnetMask))
    print(f"{subnetMask} is {'valid' if is_valid else 'invalid'}")
quot;
subnetMasks = ['255.255.255.0', '255.255.255.255', '255.240.0.0'] for subnetMask in subnetMasks: is_valid = bool(re.match(regex, subnetMask)) print(f"{subnetMask} is {'valid' if is_valid else 'invalid'}")