web-dev-qa-db-ja.com

「マイナス記号」をこの正規表現に含める方法は?

私はこの正規表現を持っています:

  var alphaExp = /^[a-zA-ZåäöÅÄÖ\s]+$/;

これは、フォーム検証の名前フィールド用です。

この「Anna-nicole」のような名前を入力できるようにする必要があります(マイナス記号に注意してください)。現在、マイナス記号はエラーの原因です。

名前にマイナス記号を含めることができるように、この正規表現を作り直す必要があります。できれば、名前もcannotで始まり、マイナス記号で始まるか、マイナス記号で終わるようにしてください。 「単語または名前」の間のマイナス記号のみを許可する必要があります。

誰もこれを行う方法を知っていますか?

ところで、それはJavaScriptです。

32
user188962

バックスラッシュを使用してマイナス記号をエスケープする必要があります。

var alphaExp = /^[a-zA-ZåäöÅÄÖ\s\-]+$/;

最初または最後で使用しないようにするには、次のようなものを試してください。

var alphaExp = /^[a-zA-ZåäöÅÄÖ\s]+[a-zA-ZåäöÅÄÖ\s\-]*[a-zA-ZåäöÅÄÖ\s]+$/;
46
Emil H

多くの正規表現方言では、文字クラスでは、プレーンハイフン/マイナスを最初または最後にする必要があります。

/^[-a-zA-ZåäöÅÄÖ\s]+$/
/^[a-zA-ZåäöÅÄÖ\s-]+$/

否定文字クラス:

/^[^-a-zA-ZåäöÅÄÖ\s]+$/
/^[^a-zA-ZåäöÅÄÖ\s-]+$/

角かっこも閉じている場合、角かっこを前面に、ハイフンを最後に配置します。

/^[]a-zA-ZåäöÅÄÖ\s-]+$/

そして、閉じ角括弧とハイフンの両方を除外する必要がある場合、次のようにします。

/^[^]a-zA-ZåäöÅÄÖ\s-]+$/

質問については、1つの解釈があります:ハイフンの周りのアルファベット文字を主張し、先頭と末尾にスペースのみを許可し、ハイフンを許可するアポストロフィを許可し、連続するハイフンを避けたい場合がありますまたはアポストロフィ。

/^\s*[a-zA-ZåäöÅÄÖ]*([a-zA-ZåäöÅÄÖ]+[-'][a-zA-ZåäöÅÄÖ]+)*\s*$/

警告:正規表現はJavaScriptではなくPerlで正式にテストされています。

文字列の先頭、0個以上のスペース。 0個以上のアルファベット文字。 「1つ以上のアルファベット文字とハイフンまたはアポストロフィ、および1つ以上のアルファベット文字」のゼロ個以上のシーケンスと、それに続く文字列の終わり。最初の\s*の後、2番目の\s*の前に余分な括弧をたたいて、名前全体をキャプチャできます。

Anna-nicoleの場合、最初のアルファ項はAnnと一致し、他のアルファ項はa-nicoleと一致します。 Anonymousの場合、最初の用語は文字列全体に一致し、2番目の用語は空になります。 O'Reillyの場合、最初の用語は空になり、2番目の用語は文字列全体に一致します。 「C--d」や「Who''Me」などの名前は拒否されます(ハイフンやアポストロフィの繰り返しは許可されません)。名前としてSmith-Jones-and-SonSmith-And-O'Reillyを許可します。先頭または末尾のハイフンまたはアポストロフィは許可されません。

「姓、名」を許可する場合は、上記の正規表現の「コア」を2つ必要とし、その間に\s+を挿入します。等。

17
/^[a-zA-ZåäöÅÄÖ\s]+[a-zA-ZåäöÅÄÖ\s\-]*[a-zA-ZåäöÅÄÖ\s\]+$/ 

それを行う必要があります(単一の文字名の厄介なEdgeケースがあり、これは一致しません。単一の文字名は許可されますか?)

1

これは実装に依存する場合があります。 Javascriptでは、バックスラッシュは文字クラスのマイナス記号をエスケープしますが、たとえばOracleでは、マイナス記号を文字クラスの最初または最後に置くだけでうまくいきます。

0
Helge Moulding