2011-12-29 7 views
1

Ö(U + 00D6)の文字を以下の正規表現に追加しようとしています。私のpreg_match機能では機能していないので、何かが間違っているようです。正常に動作しますPHPでの正規表現でのユニコードの使用

正規表現:

/^([A-Z]{1})[a-z]{1,31}$/ 

動作しませんが、必要がある1:私は明らかに大文字で開始された正規表現を作成しようとしている

/^([A-Z\x{00D6}]{1})[a-z]{1,31}$/ 

文字はÖで始まり、その後に小文字が続きます。合計で、文字列の長さは2〜32でなければなりません。 ÖのUnicode式を含む正規表現で何が問題になっていますか?

答えて

2

\x{00D6}は、1バイトの\xD6シンボルにのみ一致します。文字列をpreg_matchに渡すと、UTF-8でエンコードされる可能性が最も高くなります。これは\xC3 \x96です。

これをサポートする正規表現には/u modifierを使用する必要があります。

/^([A-Z\x{00D6}]{1})[a-z]{1,31}$/u 

また、{1}も装飾的ですが、冗長です。

+0

あなたは私の一日を保存しました。実際の質問に対する回答と{1}に関する部分が重複していてくれてありがとうございます。 – gzg