0

私に課せられた次の正規表現に対して文字列を検証しようとしています:

[-,.:; 0-9A-Z&@$£¥€'"«»‘’“”?!/\\()\[\]{}<>]{3}[-,.:; 0-9A-Z&@$£¥€'"«»‘’“”?!/\\()\[\]{}<>*=#%+]{0,157}

preg_matchこれに対して入力文字列を検証するためにPHPでa を書くのを手伝ってくれる人はいますか? 私は苦労しています:

  1. そもそも正規表現に関する私の知識はそれほど優れていません
  2. 正規表現自体に特殊文字が表示されますが、文字列に直接挿入することに PHP が満足しないと確信しています (例: $£¥€)

preg_match無駄な希望で、二重引用符をエスケープして、それを に貼り付けようとしただけです。

$ste = "Some string input";

if(preg_match("/[-,.:; 0-9A-Z&@$£¥€'\"«»‘’“”?!/\\()\[\]{}<>]{3}[-,.:; 0-9A-Z&@$£¥€'\"«»‘’“”?!/\\()\[\]{}<>*=#%+]{0,157}/",$ste))
{
    echo "OK";  
}
else
{
    echo "Not OK";  
}

前もって感謝します!!

4

2 に答える 2

1

次のようにすれば、PHP は式の「特殊」文字に完全に満足します。

  1. 入力文字列が UTF-8 エンコーディングでエンコードされていることを確認してください。

  2. PHP プログラム ファイルが UFT-8 エンコーディングを使用して保存されていることを確認します。(そして明らかに、システムの他のすべての部分でもUTF-8エンコーディングを使用する必要があります。そうしないと、途中で文字化けした文字が表示されますが、それはこの質問の範囲外です)

  3. add theu修飾子を正規表現パターン文字列の末尾に追加して、UTF-8 文字を処理するように正規表現パーサーに指示します。すなわち:

    preg_match("/....../u", ...);
                        ^
                     add this
    

それ以外は、すでにかなりうまくいっています。

于 2013-10-17T10:21:42.807 に答える
1

出来るよ:

if (preg_match('~^[ -"$&-),-<>?-\]{}£¥€«»‘’“”]{3}[ -\]{}£¥€«»‘’“”]{0,157}$~u', $ste))
    echo 'OK';
else
    echo 'Not OK';

Unicode に「u」修飾子を追加し、範囲を使用して文字クラスのサイズを縮小しました(例:と,-<の間のすべての文字を意味します),<

しかし、最も重要なことは、アンカーを追加^したことです。これは、それぞれ文字列の開始終了$を意味します。

于 2013-10-17T10:59:56.207 に答える