1

私は正規表現を使用するのはまったく新しいので、我慢してください。

以下のコードでマークされているように、3つのフィールドで正規表現チェックを行っています。フィールドに何を入力しても、文字の長さの制限も実際の文字の制限も適用されません。これらのフィールドはすべて、正規表現のチェックを単に「スキップ」して、trueとして検証しているように見えます。

// NAME
    if (preg_match('%^[A-Za-z\.\' \-]{12,80}$%', stripslashes($name)) === false) {
        $name = false;
        $errors[] = 'You need to enter a valid name. No slashes or quotes are allowed.';
    }
    else { echo 'Test: RegExp Validation passed for "NAME" <br />'; }

// PHONE NUMBER
    if (preg_match('%^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$%', $phone) === false) {
        $phone = false;
        $errors[] = 'A valid phone number must be entered. Only numbers, dashes, and parentheses are allowed';
    }
    else { echo 'Test: RegExp Validation passed for "PHONE" <br />'; }

//EXTENSION
    if (!empty($phnext) && preg_match('%^[0-9]{3,5}$%', $phnext) === false) {
        $phnext = false;
        $errors[] = 'Only 3 to 5 numbers are allowed for the phone extension.';
    }
    else { echo 'Test: RegExp Validation passed for "EXTENSION" <br />'; }

構文、コンパイル、または範囲外のエラーは発生しません。だから私は疑問に思っています、私の実際の正規表現文字列は間違っていますか、それとも私のロジックはどこかで間違っていますか?初めてではないでしょう。私は少し困惑しています。

4

1 に答える 1

2

preg_matchFALSEは、エラーが発生した場合にのみ返されます。一致しない場合は、を返し0ます。厳密なテストを使用するべきではありませんpreg_match(...) === FALSE。代わりに、次を使用できます。

if (preg_match(...)) {
    // passed
} else {
    // didn't pass
}
于 2012-06-22T19:53:26.133 に答える