0
      $var = 3;
        if ($cleanvar = preg_match('/^[0-9]{0,2}$/', $var)) 
            {
                echo $cleanvar; echo $var; exit();
            }
        else
              . . .

奇妙な出力。これにより、私cleanvarはエコーしますが1varそれでもエコーし3ます。なぜこうなった?これのポイントはregex、1桁または2桁の整数のみに一致することです。例(1、2、4、38、24)

それらは私の正規表現の問題ですか?または、この奇妙な動作の原因は何ですか?

4

4 に答える 4

3

$cleanvarただ真か偽かです。長さが0〜2桁の数字を探しています(文字列の最初から最後まで、他の文字は使用できません)。

編集:一致した場合は1を返し、一致しなかった場合は0を返します。

詳細については、これを参照してください:http: //us3.php.net/preg_match

于 2012-10-12T00:40:20.700 に答える
0

$var設定する場合は、その後に配列を続ける必要があります。{1,2}一致する>=1の場合に変更することをお勧めします。

于 2012-10-12T00:44:43.130 に答える
0

正規表現は正しく、一致しています。そのpreg_matchは、一致する場合は1を返し、一致しない場合は0を返します。ドキュメントを参照してください。

于 2012-10-12T00:44:55.260 に答える
0

入力値を検証しようとしている場合は、の戻り値を確認するだけで済みますpreg_match。演算子を使用すると、 +「前の要素の1つ以上」と一致します。

if (preg_match('/^[0-9]+$/', $var)) {
    // we matched a number only, so we know $var is clean
} else {
}

入力フィールドから数値を抽出する必要がある場合は、キャプチャグループを使用できます。

if (preg_match('/([0-9]+)/', $var, $matches)) {
    $num = $matches[1];
} else {
}

これは入力全体とは一致しませんが、入力で最初に見つかった数値に戻ることに注意してください$var

于 2012-10-12T00:53:46.113 に答える