正则表达式实现对IP/子网掩码/网关的验证

13 篇文章 4 订阅
4 篇文章 0 订阅

今天我要解决用正则表达式实现对IP/子网掩码/网关的验证,遇到了一些小问题,记录一下。

 先是用了一个笨办法,直接把三个函数列出来,第一个函数check(验证IP地址),把#ipp(IP输入框的ID)value传进函数,然后验证,取反就报错,报错用的是LAYUI中的layer.tips,然后else就是验证成功,接下来就是check1(验证子网掩码),check1也是一样的道理,在else里面又把check2(验证网关)放进来。

实现的就是,先验证IP,失败就报错,成功就进入子网掩码验证,失败就报错,成功就进入网关验证,失败就报错,成功就结束。

function check() {
    let ipp = $("#ipp").val();  

    let reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\. 
     (\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
    if (!reg.test(ipp)) {
     
        layer.tips("IP地址格式错误!", "#ipp", {tips: [2, "#ff4d4d"]})
        return;
    } else {

        check1()


    }
}


function check1() {
    let num = $("#ipa").val();
    let reg = /^(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\.(254|252|248|240|224|192|128|0)$/;
    if (!reg.test(num)) {
        layer.tips("子网掩码格式错误!", "#ipa", {tips: [2, "#ff4d4d"]})
        return
    } else {

        check2()
    }

}


function check2() {

    let ipc = $("#ipc").val();

    let reg = /^(192\.168(\.(\d|([1-9]\d)|(1\d{2})|(2[0-4]\d)|(25[0-5]))){2})$/;

    if (!reg.test(ipc)) {
        layer.tips("网关格式错误!", "#ipc", {tips: [2, "#ff4d4d"]})
        return
    }


}

实现的效果就是这样:


因为我要实现两个一模一样的的分页,所以如果我把代码全部复制粘贴改输入框的ID,会很麻烦,代码也会很长很乱,所以我新建了一个check的JS文件,用来存放三种检测方法:

//ip校验
function ipCheck(value){
    let reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
    let result = reg.test(value);
    return result;
}

//子网掩码校验

function maskCheck(value){
    let reg = /^(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\.(254|252|248|240|224|192|128|0)$/;
    let result = reg.test(value);
    return result;
}

//网关校验

function gateCheck(value){
    let reg = /^(192\.168(\.(\d|([1-9]\d)|(1\d{2})|(2[0-4]\d)|(25[0-5]))){2})$/;
    let result = reg.test(value);
    return result;
}

然后在项目关键JS里面调用这三种方法,代码如下: 

       

function check() {
    if (!ipCheck($("#ipp").val())) {
        layer.tips("IP地址输入错误!", "#ipp", {tips: [2, "#ff4d4d"]})
        return;
    }

    if (!maskCheck($("#ipa").val())) {
        layer.tips("子网掩码输入错误!", "#ipa", {tips: [2, "#ff4d4d"]})
        return;
    }

    if (!gateCheck($("#ipc").val())) {
        layer.tips("网关格式输入错误!", "#ipc", {tips: [2, "#ff4d4d"]})
        return;
    }
}

这样我只要再复制一段,修改每个文本框的ID就可以实现了,项目内的关键JS也不会显得很乱。实现的效果和上面GIF是没有区别的。

注意:以上正则表达式是不够准确的,能做到大致验证,但是无法满足专业的需求,我看到一篇写的比较全面的的验证博客,有需求可以看一下:https://blog.csdn.net/xuw_xy/article/details/119151832

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 可以使用Python的re模块中的正则表达式来判断二进制子网掩码的合法性。以下是一个示例代码: ```python import re def is_binary_subnet_mask(mask): # 使用正则表达式匹配是否为二进制数 if not re.match(r'^[01]{32}$', mask): return False # 判断是否为连续的1 if not re.match(r'^1*0*$', mask): return False return True ``` 在上面的代码中,我们首先使用正则表达式 `^[01]{32}$` 来匹配一个32位的二进制数。然后,使用正则表达式 `^1*0*$` 来判断是否为连续的1和后面跟着连续的0,这是一个二进制子网掩码的特征。 使用示例: ```python >>> is_binary_subnet_mask('11111111111111111111111100000000') True >>> is_binary_subnet_mask('11111111111111111111111110000000') False >>> is_binary_subnet_mask('11111111111111111111111111111111') False >>> is_binary_subnet_mask('10000000111111111111111111111111') False ``` ### 回答2: 在Python中,可以使用正则表达式判断二进制子网掩码的合法性。二进制子网掩码是一个32位的二进制数,表示IP地址中网络部分和主机部分的划分。 由于二进制子网掩码的规则非常具体,可以用正则表达式来匹配并判断其合法性。 先定义以下二进制子网掩码的合法规则: 1. 二进制子网掩码必须是32位的二进制数; 2. 子网掩码的网络部分必须连续地由“1”构成,主机部分必须连续地由“0”构成; 3. 子网掩码的网络部分和主机部分的交界处可以由“0”或者由“1”组成。 根据上述规则,可以使用如下正则表达式来判断一个二进制子网掩码的合法性: ```python import re def is_valid_subnet_mask(binary_mask): pattern = r"^(1{1,32})|(0{1,32})$" result = re.match(pattern, binary_mask) if result: return True else: return False ``` 在代码中,使用了正则表达式的匹配方法`re.match()`来判断输入的二进制子网掩码是否满足规则。其中,正则表达式的`^`表示开头,`$`表示结尾,`1{1,32}`表示1可以重复1到32次,`0{1,32}`表示0可以重复1到32次。 通过调用`is_valid_subnet_mask`函数并传入二进制子网掩码,即可判断该子网掩码的合法性。如果返回值为True,则该二进制子网掩码合法;如果返回值为False,则该子网掩码不合法。 这样,我们就可以使用正则表达式来判断一个二进制子网掩码的合法性了。 ### 回答3: Python中可以使用正则表达式来判断二进制子网掩码的合法性。正则表达式是一种字符串匹配的工具,可以用来验证特定的模式是否存在于文本中。 下面是一个使用正则表达式判断二进制子网掩码合法性的示例代码: ```python import re def is_valid_subnet_mask(subnet_mask): pattern = r'^(([01]{8})\.){3}([01]{8})$' # 匹配一个由四个八位二进制数字组成的字符串,每个数字之间用点号分隔 if re.match(pattern, subnet_mask): return True else: return False # 测试 subnet_mask1 = '11111111.11111111.11111111.00000000' subnet_mask2 = '11111111.11111111.11110000.00000000' subnet_mask3 = '11111111.11110000.00000000.00000000' subnet_mask4 = '11110000.00000000.00000000.00000000' print(is_valid_subnet_mask(subnet_mask1)) # 输出:True print(is_valid_subnet_mask(subnet_mask2)) # 输出:True print(is_valid_subnet_mask(subnet_mask3)) # 输出:True print(is_valid_subnet_mask(subnet_mask4)) # 输出:True ``` 该代码中,使用了正则表达式的匹配功能来判断传入的字符串是否符合特定的模式。正则表达式的模式包括了四个八位二进制数字,每个数字之间由点号分隔。最终返回True表示合法,返回False表示不合法。 通过这种方式,我们可以使用Python的正则表达式模块re来方便地进行二进制子网掩码合法性的判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beannnnnnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值