我正在使用調節表達式來檢查有效的美國城市名稱。我的要求如下:正則表達式與美國城市相匹配,允許某些特殊字符
- 只能是25個字符
- 只能接受字母字符和以下特殊字符:
',.-
。 應使用評估假:
St. Clou$$, [email protected], $t. Thomas
。應使用評估真正:
O'John, St. Cloud, Cov d'Aline, Milt-Freeman
。
這裏是表達我到目前爲止: /(^|\s)[a-zA-Z',.\s-]{1,25}(?=\s|$)((?!\W)[a-zA-Z',.\s-]{1,25}(?=\s|$))?/g
這裏是我是如何被測試:
let regex = /(^|\s)[a-zA-Z',.-\s]{1,25}(?=\s|$)((?!\W)[a-zA-Z',.-\s]{1,25}(?=\s|$))?/g;
let str = "St. Clou$$";
let validation = regex.test(str)
if(validation){
return true
} else {
return false }
使用上面的測試,正則表達式表達似乎是通過所有的真實條件,但我的測試也返回true
爲St. Clou$$
和$t. Thomas
。看起來好像有多個單詞,其中一個單詞有一個不可接受的特殊字符時,它仍然通過。
我能加入,使表達了上述所有條件爲假返回false?有什麼想法嗎?謝謝。
首先 - '-'具有在字符類特殊的意義(內部'[]')。查看它;)第二部分'(^ | \ s)[a-zA-Z',.- \ s] {1,25}(?= \ s | $)'匹配例如's'或「(三個空格)」或單個字符「C」。第二部分是可選的('((?!\ W)[a-zA-Z',.- \ s] {1,25}(?= \ s | $))?')。所以所有的正則表達式必須匹配才能返回true是所提到的組合之一(例如)。你應該錨定字符串的開始和結束(使用'^'和'$')。 – ClasG
謝謝。是的,當我發佈時,我意識到'-'在錯誤的位置。感謝幫助。 –