Как настроить сообщения об ошибках регулярного выражения Zend_Form?

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

  $ postcode = $ form-> createElement ('text', 'postcode');
     $ postcode-> setLabel ('Почтовый код:');
     $ postcode-> addValidator ('regex', false, 
         array ('/ ^ [az] {1,3} [0-9] {1,3}? [0-9] {1,3} [az] {1,3} $ / i'));
     $ Postcode-> addFilters (массив ( 'StringToUpper'));
     $ Postcode-> setRequired (истина); 

Он создает поле ввода в форме и задает правило проверки регулярных выражений и отлично работает.

Проблема в том, что сообщение об ошибке, которое оно выводит, когда пользователь вводит недопустимый почтовый индекс, таков:

  «POSTCODE» не соответствует шаблону
     '/ ^ [az] {1,3} [0-9] {1,3}? [0-9] {1,3} [az] {1,3} $ / i' 

(где вход был POSTCODE)

Как я могу изменить это сообщение, чтобы быть немного более дружелюбным?

Solutions Collecting From Web of "Как настроить сообщения об ошибках регулярного выражения Zend_Form?"

Я думаю, что вы можете установить сообщение об ошибке в Validator:

$postcode = $form->createElement('text', 'postcode'); $postcode->setLabel('Post code:'); $postcode->addValidator('regex', false, array( 'pattern' => '/^[az]{1,3}[0-9]{1,3} ?[0-9]{1,3}[az]{1,3}$/i') 'messages' => array( 'regexInvalid' => "Invalid type given, value should be string, integer or float", 'regexNotMatch' => "'%value%' does not match against pattern '%pattern%'", 'regexErrorous' => "There was an internal error while using the pattern '%pattern%'" ) ); $postcode->addFilters(array('StringToUpper')); $postcode->setRequired(true); 

Если это не сработает, попробуйте

  • setErrorMessages (массивы $ messages) : добавить несколько сообщений об ошибках для отображения ошибок проверки формы, перезаписав все ранее установленные сообщения об ошибках.

Если вы определяете свой валидатор как внешнюю переменную, используйте setMessage () :

 $validator = new Zend_Validate_Alnum(); $validator->setMessage('My custom error message for given validation rule', Zend_Validate_Alnum::INVALID); $formElement->addValidator($validator); 

Как вы видите в примере выше валидатор для формы не отличается от других типов экземпляров Zend_Validate_ *.

Настройка сообщений проверки включает поиск документов API и определение константы сообщения для данной ошибки проверки (как и в случае Zend_Validate_Alnum :: INVALID). Конечно, если ваша среда IDE обеспечивает хорошее автозаполнение контекста, просто ввести класс проверки правильности может быть достаточно – поскольку константы сообщений в большинстве случаев очень понятны.

Другой способ – использовать магические методы Zend_Form и просто передать «сообщение» в качестве параметра для вашего валидатора:

 $formElement->addValidator(array( 'alnum', false, array('messages' => array( Zend_Validate_Alnum::INVALID => 'my message' )) )); 

Это внутренне инициирует метод setMessages (), определенный в Zend_Validate_Abstract, и, по существу, просто сокращенное время / время, заданное для Zend_Form.

NB: В руководстве ZF имеется специальный раздел, посвященный сообщениям проверки.

Вы можете использовать исходный почтовый индекс Zend

 $user->addElement('text', 'postcode', array('label' => 'Postcode *', 'required' => true, 'class' => 'postcode_anywhere', "validators" => array( array("NotEmpty", false, array("messages" => array("isEmpty" => "Required *"),)), array('PostCode', false, array('locale' => 'en_GB') ) ), 'filters' => array(array('StringToUpper')), 'class' => 'text' ) );