很多童鞋需要用户的表单输入,习惯性的使用正则匹配判断,但是这个有时候可能不是最好的方法。
以 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('函数')
执行的结果是这样的
执行结果截图可以看到,就连速度,也比不过函数。
当然,这都是最简单的判别。没有所谓的标准,只是抛出一个问题,不要总是用正则去解决这样的问题。特别是那些还不会写正则的童鞋,完全可以用函数去尝试一下。
也欢迎大家评论想法哈哈哈。
网友评论