正則表達式判斷正整數的陷阱:-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