使用正則表達式判斷正整數時,為什么-1會被誤判為真?

使用正則表達式判斷正整數時,為什么-1會被誤判為真?

正則表達式判斷正整數的陷阱:-1 誤判為真

JavaScript 中使用正則表達式驗證正整數時,容易出現將“-1”誤判為真的情況。 讓我們分析一下代碼和正則表達式:

以下代碼片段旨在使用正則表達式 /[1-9]d*$/ 判斷字符串是否為正整數:

function ispositiveinteger(str) {     const regex = /[1-9]d*$/;     return regex.test(str); }  console.log(ispositiveinteger("-1")); // 輸出 true (錯誤) console.log(ispositiveinteger("1")); // 輸出 true (正確)

為什么 “-1” 會被誤判為 true 呢? 問題在于正則表達式 /[1-9]d*$/ 的設計。

  • [1-9]:匹配一個 1 到 9 之間的數字。
  • d*:匹配零個或多個數字。
  • $:匹配字符串的結尾。

該正則表達式從字符串的 結尾 開始匹配。 對于 “-1″,它匹配到了最后的 1,因此返回 true。 它并沒有檢查整個字符串是否符合正整數的格式。

正確的正則表達式

為了正確判斷正整數,正則表達式需要從字符串的 開頭 開始匹配,并確保整個字符串只包含數字,且第一個數字不為 0。 正確的正則表達式應該是:

function isPositiveInteger(str) {     const regex = /^[1-9]d*$/;     return regex.test(str); }  console.log(isPositiveInteger("-1")); // 輸出 false (正確) console.log(isPositiveInteger("1")); // 輸出 true (正確)

通過在正則表達式開頭添加 ^,我們指定了匹配必須從字符串的開頭開始。 現在,”-1″ 將被正確地判定為 false,因為 ^ 要求匹配從“-”開始,而 [1-9] 不匹配“-”。

因此,使用正則表達式驗證數據類型時,務必仔細考慮匹配的起始位置和整個字符串的結構,避免出現邏輯錯誤。 ^ 和 $ 這兩個錨點字符在正則表達式中至關重要,它們分別表示字符串的開頭和結尾。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享