Zend Framework: почему пробел проверяется на соответствие моему регулярному выражению? - PullRequest
2 голосов
/ 19 января 2011

У меня есть следующий код:

$sfKeyword = new Zend_Form_SubForm();

$tfKeyword = $sfKeywords->createElement('text', 'keyword');
$tfKeyword->setLabel('Keyword: ');
$tfKeyword->addValidator('regex', false, array('/[a-zA-Z_][a-zA-Z_0-9]*/'));

Это регулярное выражение проверяет ключевые слова и, как предполагается, разрешает только az, AZ и _ в качестве первых символов, а затем дополнительно разрешает цифры 0-9, ноль или болеевхождения.

Но при вводе какой-либо строки с пробелами между ними строка проходит валидатор без сообщения об ошибке.Этого не должно быть.

Обратите внимание, я также пытался

'/[a-zA-Z_][a-zA-Z_0-9]*/s'

, но нет никакой разницы (как и ожидалось).

Что не так с регулярным выражением(или Zend Framework)?

1 Ответ

7 голосов
/ 19 января 2011

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

/^[a-zA-Z_][a-zA-Z_0-9]*$/

Первый ^ символ говорит «начало строки», а завершающий $ означает «конец строки».Так что теперь он будет соответствовать любой строке, которая начинается с [a-zA-Z_], а затем сопровождается одним или несколькими [a-zA-Z_0-9] до конца строки.

...