正規表現のサポートが必要です。私の文字列にはUnicode文字が含まれており、以下のコードは機能しません。
最初の4文字は数字、次にコンマ、そしてアルファベットまたは空白でなければなりません...正規表現の最後に/ uを追加すると、すでに読んでいますが、うまくいきませんでした...
私のコードは非Unicode文字で動作します
$post = '9999,škofja loka';;
echo preg_match('/^[0-9]{4},[\s]*[a-zA-Z]+', $post);
あなたの答えをありがとう!
更新された回答:
これは現在テストされ、機能しています
$post = '9999, škofja loka';
echo preg_match('/^\\d{4},[\\s\\p{L}]+$/u', $post);
\\w
は、すべてのUnicode文字が含まれているわけではなく、文字に加えて[0-9_]
も含まれているため、機能しません。
ユニコードモードをアクティブにするためのu
修飾子も重要です。
カンマの後に文字またはの空白がある場合は、それらを同じ文字クラスに入れる必要があります。正規表現では、の後に0個以上の空白があります。カンマの場合は文字のみです。
Php正規表現の詳細については、 http://www.regular-expressions.info/php.html を参照してください。
\\p{L}
(Unicode文字)について説明します ここ
また、文字列の終わりの境界$
を使用して、文字列全体が実際に検証されるようにすることも重要です。そうしないと、最初の空白のみに一致し、残りは無視されます。
[a-zA-Z]
は、a-zからA-Zの範囲の文字にのみ一致します。 US-ASCII以外の文字を使用しているため、/u
修飾子に関係なく、正規表現は一致しません。 Wordの文字エスケープシーケンス(\w
)を使用する必要があります。
$post = '9999,škofja loka';
echo preg_match('/^[0-9]{4},[\s]*[\w]+/u', $post);
問題はあなたの正規表現です。 a b c ... z A B C ... Z
のみを受け入れると明示的に言っています。 š
はa-zセットにありません。 š
は他の文字と同じようにs
とは異なることを忘れないでください。
したがって、本当に文字のシーケンスが必要な場合は、Unicodeプロパティをテストする必要があります。例えば.
echo preg_match('/^[0-9]{4},[\s]*\p{L}+', $post);
\p{L}
は、文字と見なされるすべてのUnicode文字と一致するため、これは機能するはずです。 AからZだけではありません。
u
を追加し、末尾のスラッシュを覚えておいてください。
echo preg_match('/^[0-9]{4},[\s]*[a-zA-Z]+/u', $post);
編集:
echo preg_match('/^\d{4},(?:\s|\w)+/u', $post);