2012-02-16 13 views
2

私の現在の正規表現は/^[a-zA-Z]+([a-zA-Z]+)*$/です。それはのような名前のために働く:とにかくその文字列に任意の言語の文字が含まれていることを確認するにはどうすればよいですか?

John Smith

、サイトには、例えば、このようなことができ、国際および名前です:

Jānis Bērziņš

それは有効な名前ですが、正規表現はに失敗しますā,ēおよびš文字のために検証してください。

1つの方法は、許可されているすべての文字を入力することですが、リストは大変です!

私は簡単な方法を探しています。たぶんホワイトリストアプローチの代わりにブラックリストですか?

アドバイスありがとうございます!

+0

ドゥ働いている参照してください\pL

/^\pL+(\pL+)*$/ 

文字のUnicodeプロパティを使用して文字クラスを置き換えますあなたは名前のためだけにそれを必要としますか?もしそうなら、ホワイトリストアプローチはうまくいくはずです – Darvex

+0

最初に名前を検証するべきではありません。それらは文字以外の多くの記号を含むことができます。 –

答えて

6

the appropriate Unicode character propert(y/ies)の正規表現をUTF-8モードで使用してください。

+0

ありがとう! '/^\ pL ++ $/uD'のようなものでしょうか? – daGrevis

+1

そういうこと。あなたは*(*、 '、など)でもいくつかの句読点が必要な場合があります。 –

2

だけhere on regular/expressions.info私のテストでのUnicodeプロパティ

の概要writecodeonline.comに、これは

$s = "Jānis Bērziņš"; 
preg_match("/^\\pL+(\\pL+)*$/", $s, $matches); 
+0

さて、「JānisBērziņš」はそれに失敗しました。 – daGrevis

+0

正規表現を '/^\ pL +(\ pL +)* $/uD'に変更して、期待どおりに動作させるようにしてください。 – daGrevis

+0

@daGrevism私のテストでは、 'u'修飾子なしで動作していますが、これを引き起こす原因は不明です。 – stema

関連する問題