0

この正規表現を使用して、アクセント文字を受け入れることができます

/^([\p{L}a-zA-Z ,-]*)$/i

このWebサイトで正規表現をテストすると: http://rubular.com/r/MRESYEGO2d すべて問題ありませんが、phpで同じ正規表現を使用すると機能しません。

$alphaNumCity = "/^([\p{L}a-zA-Z0-9 ,-]*)$/i";
if (preg_match($alphaNumCity, $champ)) {
    echo "<label for='tags'>Villes<span style='color:red;'>*</span></label><input id='tags' name='businessVille' value='".$champ."' required />";
} else {
    echo "<label for='tags'>Villes<span style='color:red;'>(entrer un nom de ville valide)*</span></label><input id='tags' name='businessVille' required />";
    $valide = false;
}

このコードはelseに入ります。

私のコードではなく、ここで動作する理由がわかりませんhttp://rubular.com/r/MRESYEGO2d ?

4

2 に答える 2

1

Unicode フラグ "u" に/^([\p{L}a-zA-Z0-9 ,-]*)$/iuは、いくつかの注意事項があります。

/u パターン修飾子を使用する場合の UTF-8 文字列の有効性に関して、注意すべき点がいくつかあります。

  1. パターン自体に無効な UTF-8 文字が含まれている場合、エラーが発生します (上記のドキュメントで説明されているように、「PHP 4.3.5 以降、パターンの UTF-8 有効性がチェックされています」)。

  2. サブジェクト文字列に無効な UTF-8 シーケンス/コードポイントが含まれている場合、基本的に preg_* 関数の「静かな死」が発生します。一致するものは何もありませんが、文字列が無効な UTF-8 であることは示されません。

  3. PCRE は、5 オクテットと 6 オクテットの UTF-8 文字シーケンスを (パターンとサブジェクト文字列の両方で) 有効であると見なしますが、これらは Unicode ではサポートされていません (「Linux および Unix のセキュア プログラミング HOWTO」のセクション 5.9「文字エンコーディング」を参照してください。http://www.tldp.org/およびその他の場所に あります)

  4. UTF-8 文字列の有効性をテストする (そして 5/6 オクテット シーケンスを破棄する) PHP のサンプル アルゴリズムについては、http: //hsivonen.iki.fi/php-utf8/にアクセスしてください。

コード サンプルと詳細については、ドキュメントを参照してください: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805

于 2013-09-30T16:57:30.137 に答える