2017-05-09 13 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 } 

を上記のテストを使用して、正規表現式はすべて合格しているようです私のテストはまたSt. Clou$$$t. Thomasのためにtrueを返しています。複数の単語があり、そのうちの1つがまだ受け入れられない特殊文字を持っているように見えます。

上記のすべての誤った条件に対して、式をfalseに戻すにはどうすればよいですか?何かご意見は?ありがとうございました。

+0

最初の '--'は、文字クラス(' [] 'の中)で特別な意味を持ちます。 (^ | \ s)[a-zA-Z '、.- \ s] {1,25}(?= \ s | $) 'は、例えば' s 'にマッチします。または ''(3つのスペース) - または単一の文字 'C '。 2番目の部分はオプションです( '((?!\ W)[a-zA-Z '、.- \ s] {1,25}(?= \ s | $))?だから真を返すために正規表現を一致させる必要があるのは、(例えば)上記の組み合わせの1つです。 '^'と '$'を使って文字列の先頭と末尾を固定してください。 – ClasG

+0

ありがとうございます。はい、私は「 - 」が間違った場所にあることに気づきました。ヘルプをよろしくお願いいたします。 –

答えて

1

は、それが文字列^と終了$の開始に一致する、あなたの許可文字の1-25と一致する

^[a-zA-Z',.\s-]{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

それはうまくいった!ありがとう! –

関連する問題