很多童鞋需要用戶的表單輸入,習(xí)慣性的使用正則匹配判斷,但是這個(gè)有時(shí)候可能不是最好的方法。
以 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])$/
如果是函數(shù)去判斷的話,代碼可能是這樣的
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
}
正則相比函數(shù),本身非常的難讀,不易去理解
我也簡(jiǎn)單的寫了一個(gè)判斷代碼
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('函數(shù)')
console.log(`test result -> ${checkIP(ip)}`)
console.timeEnd('函數(shù)')
執(zhí)行的結(jié)果是這樣的

執(zhí)行結(jié)果截圖
可以看到,就連速度,也比不過(guò)函數(shù)。
當(dāng)然,這都是最簡(jiǎn)單的判別。沒(méi)有所謂的標(biāo)準(zhǔn),只是拋出一個(gè)問(wèn)題,不要總是用正則去解決這樣的問(wèn)題。特別是那些還不會(huì)寫正則的童鞋,完全可以用函數(shù)去嘗試一下。
也歡迎大家評(píng)論想法哈哈哈。