PHP preg_match возвращает false, даже если условие соответствует - PullRequest
0 голосов
/ 31 мая 2018

Я использую 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 голосов
/ 31 мая 2018

Так что preg_match() может вернуть 0, 1 или false, вероятно, безопаснее провести строгую проверку того, что результат равен 1, то есть

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

Строка не прошла проверку.Если это не решит вашу проблему, нам нужно увидеть несколько примеров строк, через которые вы проходите, которые всегда проходят.Возможно, стоит также объяснить, с чем вы хотите сопоставить регулярное выражение, потому что это тоже может быть частью проблемы.

0 голосов
/ 31 мая 2018

тыр это

(preg_match ('/^[-A-Za-z\d]*$/', $string))
...