PHP正则表达式被忽略/验证为真

时间:2012-06-22 19:49:18

标签: php regex validation

请耐心等待,因为我对使用正则表达式很陌生。

我对三个字段进行了正则表达式检查,如下面的代码所示。无论我在字段中输入什么,我的字符长度限制,以及我的实际字符限制都不会被强制执行;所有这些字段似乎只是“跳过”我的正则表达式检查并验证为真。

// 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 />'; }

我没有得到任何语法,编译或超出范围的错误。所以我想知道,我的实际正则表达式字符串是错误的,还是我的逻辑错误?这不是第一次。我只是有点难过。

1 个答案:

答案 0 :(得分:2)

如果发生错误,

preg_match只会返回FALSE。如果没有匹配项,则会返回0。您不应该使用严格的测试preg_match(...) === FALSE,而是可以使用:

if (preg_match(...)) {
    // passed
} else {
    // didn't pass
}