即使条件匹配,PHP preg_match也会返回false

时间:2018-05-31 07:29:14

标签: php regex preg-match

我正在使用 preg_match 验证输入:

$string = 'test';

if (preg_match ('/[^-a-z\d]/i', $string))
{
    return true;
}
else
{
    return false;
}

好吧,我无法理解为什么它会在这里返回 false

我错过了什么吗?

不应该返回 true

解决方案:

(preg_match ('/^[-a-z\d]*$/i', $string))

2 个答案:

答案 0 :(得分:1)

Tyr this

{
    "apps":[
        ...
        "environmentSource": "environments/environment.ts",
        "environments": {
            "dev": "environments/environment.ts",
            "staging": "environments/environment.staging.ts",
            "prod": "environments/environment.prod.ts"
        }
    ]
}

答案 1 :(得分:1)

因此preg_match()可以返回01false严格检查结果是否等于1可能更安全,即< / p>

abstract class Pattern 
{
    /** @const int */
    const TEXT_MATCH = 1;

    /**
     * @param string $pattern regex pattern to match against
     * @param string $string  the text string to search
     * 
     * @return bool 
     */
    public static function match(string $pattern, string $string): bool
    {
        return preg_match($pattern, $string) === self::TEXT_MATCH;
    }
}

主要是你感兴趣的是这个

preg_match($pattern, $string) === 1;

如果您随后使用它:

$result = Pattern::match('/[^-a-z\d]/i', 'test');
var_dump($result); // false

字符串没有通过检查。如果这还没有解决您的问题,我们需要查看一些您经过的字符串示例,这些字符串总是会通过。它可能也值得解释你希望正则表达式匹配的内容,因为这也可能是问题的一部分。