2017-05-09 56 views
-1

我正在使用調節表達式來檢查有效的美國城市名稱。我的要求如下:正則表達式與美國城市相匹配,允許某些特殊字符

  • 只能是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 } 

使用上面的測試,正則表達式表達似乎是通過所有的真實條件,但我的測試也返回trueSt. Clou$$$t. Thomas。看起來好像有多個單詞,其中一個單詞有一個不可接受的特殊字符時,它仍然通過。

我能加入,使表達了上述所有條件爲假返回false?有什麼想法嗎?謝謝。

+0

首先 - '-'具有在字符類特殊的意義(內部'[]')。查看它;)第二部分'(^ | \ s)[a-zA-Z',.- \ s] {1,25}(?= \ s | $)'匹配例如's'或「(三個空格)」或單個字符「C」。第二部分是可選的('((?!\ W)[a-zA-Z',.- \ s] {1,25}(?= \ s | $))?')。所以所有的正則表達式必須匹配才能返回true是所提到的組合之一(例如)。你應該錨定字符串的開始和結束(使用'^'和'$')。 – ClasG

+0

謝謝。是的,當我發佈時,我意識到'-'在錯誤的位置。感謝幫助。 –

回答

1

嘗試

^[a-zA-Z',.\s-]{1,25}$ 

它匹配您允許的字符1-25,匹配字符串^的開始和結束$。另請注意,我將-放置在字符類的末尾,因爲它定義了一系列字符。

下面是一個illustrationusing JS:

var re = /^[a-zA-Z',.\s-]{1,25}$/g, 
 
    data = ['St. Clou$$', 'New York', '[email protected]', 'Houston', '$t. Thomas', 'Chicago']; 
 

 
data.forEach(function(city) { 
 

 
    document.write(city + '='); 
 

 
    if(re.test(city)) { 
 
    document.write('true<br>'); 
 
    } else { 
 
    document.write('false<br>'); 
 
    } 
 
});

Check it out here at regex101

+0

工作正常!謝謝! –

相關問題