ip 的正则和函数判断

2017-05-05  本文已影响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('函数')

执行的结果是这样的

执行结果截图

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

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

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

上一篇下一篇

猜你喜欢

热点阅读