【前端面试】如何不通过正则:验证IP地址合法性

前言

在 Web 开发中,验证用户输入的 IP 地址是否合法是一个常见需求

面试中也会问到

通常,我们会使用正则表达式来完成这个任务,因为它简洁高效。然而,正则表达式对于初学者来说可能有些晦涩难懂。本文将介绍一种不使用正则表达式的方法来验证 IP 地址的合法性,并深入探讨其背后的原理

IP 地址的格式

一个合法的 IPv4 地址由四个用点号分隔的数字组成,每个数字的取值范围是 0 到 255。例如,“192.168.1.1” 就是一个合法的 IP 地址

验证思路

我们可以将 IP 地址的验证过程分解为以下几个步骤:

  1. 分割字符串:将 IP 地址字符串按照点号分割成四个部分

  2. 检查数量:确保分割后的数组长度为 4

  3. 验证每个部分:

    • 检查每个部分是否为有效的数字字符串

    • 将字符串转换为数字,并检查其是否在 0 到 255 之间

代码实现

function isValidIP(ip) {
    // 1. 分割字符串
    const parts = ip.split('.');
    
    // 2. 检查数量
    if (parts.length !== 4) {
        return false;
    }
    
    // 3. 验证每个部分
    for (let part of parts) {
        // 检查是否为有效的数字字符串
        if (!/^\d+$/.test(part)) {
            return false;
        }
        
        // 转换为数字并检查范围
        const num = parseInt(part, 10);
        if (num < 0 || num > 255) {
            return false;
        }
        
        // 检查前导零
        if (part.length > 1 && part[0] === '0') {
            return false;
        }
    }
    
    return true;
}

// 测试用例
console.log(isValidIP("192.168.1.1")); // true
console.log(isValidIP("256.168.1.1"));  // false
console.log(isValidIP("192.168.1"));    // false
console.log(isValidIP("192.168.1.01")); // false

代码思路

分割字符串:使用 split(‘.’) 方法将 IP 地址字符串按照点号分割成数组

检查数量:如果分割后的数组长度不等于 4,说明 IP 地址格式不正确,直接返回 false

验证每个部分:

  • 使用正则表达式 /^\d+$/ 检查每个部分是否由纯数字组成

  • 将字符串转换为整数,并检查其是否在 0 到 255 之间

  • 检查是否有前导零(例如 “01” 是不合法的)

总结

通过这种不使用正则表达式的方法,我们可以更直观地理解 IP 地址的验证过程

虽然正则表达式在处理字符串匹配时非常强大,但在某些情况下,使用更基础的字符串操作和逻辑判断也能达到同样的效果,并且更容易理解和维护

我们也需要理解,如何不依赖正则,达到我们需要的目的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

名之以父

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

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

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

打赏作者

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

抵扣说明:

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

余额充值