ip 的正則和函數(shù)判斷

很多童鞋需要用戶的表單輸入,習(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)論想法哈哈哈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容