美文网首页
ip 的正则和函数判断

ip 的正则和函数判断

作者: 夫子有多高酱 | 来源:发表于2017-05-05 15:32 被阅读0次

    很多童鞋需要用户的表单输入,习惯性的使用正则匹配判断,但是这个有时候可能不是最好的方法。

    以 ip 地址为例

    如果用正则去判断 ip 地址的正确性,代码可能是这样的

    let exp = /^(\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])$/
    

    如果是函数去判断的话,代码可能是这样的

    function checkIP (ip) {
      if (typeof ip !== 'string') return false
      let ipSplit = ip.split('.')
    
      if (ipSplit.length != 4) return false
    
      for (let elem in ipSplit) {
        elem = parseInt(elem)
    
        if (isNaN(elem)) return false
    
        if (elem < 0 || elem > 255) return false
      }
    
      return true
    }
    

    正则相比函数,本身非常的难读,不易去理解

    我也简单的写了一个判断代码

    function checkIP (ip) {
      if (typeof ip !== 'string') return false
      let ipSplit = ip.split('.')
    
      if (ipSplit.length != 4) return false
    
      for (let elem in ipSplit) {
        elem = parseInt(elem)
    
        if (isNaN(elem)) return false
    
        if (elem < 0 || elem > 255) return false
      }
    
      return true
    }
    
    let exp = /^(\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 ip = '192.168.1.1'
    console.time('正则')
    console.log(`test result -> ${exp.test(ip)}`)
    console.timeEnd('正则')
    
    console.time('函数')
    console.log(`test result -> ${checkIP(ip)}`)
    console.timeEnd('函数')
    
    

    执行的结果是这样的

    执行结果截图

    可以看到,就连速度,也比不过函数。

    当然,这都是最简单的判别。没有所谓的标准,只是抛出一个问题,不要总是用正则去解决这样的问题。特别是那些还不会写正则的童鞋,完全可以用函数去尝试一下。

    也欢迎大家评论想法哈哈哈。

    相关文章

      网友评论

          本文标题:ip 的正则和函数判断

          本文链接:https://www.haomeiwen.com/subject/ilqstxtx.html