2010-11-28 13 views
3

テキストエリアは私のフォームの一部です。ユーザーは少しテキストを書く必要があり、このテキストを検証したいと思います。私は無効として...それはAOUですべての単語を扱う正規表現でäöüÄÖÜを言及しているが説明書式入力用の正規表現

/^[0-9a-zA-ZäöüÄÖÜ_\-']+$/ 

:今の私は、次の正規表現を使用しています。さらに、それは空のスペースを受け入れません。

どのように正規表現を改善するためのアイデアですか?

答えて

5

は、Unicode対応の正規表現を使用します。

/[\pL\pN_\-]+/ 
+0

'-'(おそらく)ではなく' \ p {Pd} 'を使い、' _'の代わりに '\ p {Pc}'を使いたいかもしれませんおそらく、はるかに少ない)。 – tchrist

1

まず、エンコードに問題がある可能性があります。そのため、äöüÄÖÜは無効として登録されています。私はPHPユーザーではないので、あなたの質問に直接答えることはできませんが、this pageを見てください。また、適切な文字クラスを使用すると、適切なすべての文字を明示的に書くよりもうまくいく可能性があります。うーん、これはおそらくエンコーディング設定に依存しているでしょう。

第二に、あなたはとても

/^[0-9a-z A-ZäöüÄÖÜ_\-']+$/ // note space after a-z 

が動作するはずです、あなたの正規表現にスペースが必要です。最後の段落で文字クラスの使用について書きました。 \wは、あなただけのすべての「単語」の文字(文字、数字など)を示すために\wを使用することができますので、正規表現はあなたにユーザーからどのようなテキストを
/^[\w_\-' ]+$/
検討していることになる代わりにa-zA-ZäöüÄÖÜ

1

のに十分であるかもしれません「有効」であるか?

+0

説明テキストなので、テキストには、 "。"、 "!"のような文字列を制限する全くのもの、一連の単語、および文字が含まれている可能性があります。または? \ wはöäÖÄÄÜÜを受け入れません.. –

2

PCREのU修飾子は、UTF-8が可能になります。また、正規表現のスペースが不足している、とあなたはそれを少し凝縮することができます

/^[0-9a-zäöü\- ]+$/ui 

私は「私は」外国文字の大文字で動作するかはわからないけど。

また、句読点を含めることもできます。