2010-03-31 51 views
4

我有以下代码:我如何定制Zend_Form正则表达式错误信息?

 $postcode = $form->createElement('text', 'postcode'); 
    $postcode->setLabel('Post code:'); 
    $postcode->addValidator('regex', false, 
     array('/^[a-z]{1,3}[0-9]{1,3} ?[0-9]{1,3}[a-z]{1,3}$/i')); 
    $postcode->addFilters(array('StringToUpper')); 
    $postcode->setRequired(true);

它的形式创建了一个输入框,并设置正则表达式验证规则和工作得很好。

的问题是,当用户输入了一个无效的邮政编码它显示错误消息是这样的:

'POSTCODE' does not match against pattern 
    '/^[a-z]{1,3}[0-9]{1,3} ?[0-9]{1,3}[a-z]{1,3}$/i'

(其中输入是邮编)

如何更改该消息是一个小更友好?

回答

5

我觉得要记住,你可以在验证设置的错误消息:

$postcode = $form->createElement('text', 'postcode'); 
$postcode->setLabel('Post code:'); 
$postcode->addValidator('regex', false, array(
    'pattern' => '/^[a-z]{1,3}[0-9]{1,3} ?[0-9]{1,3}[a-z]{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(数组$消息):添加在表单验证错误上显示多条错误消息,覆盖所有以前设置的错误消息。
1

如果你定义验证外部变量使用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 Docs并找出给定验证错误的消息常量(正如我在Zend_Validate_Alnum :: INVALID情况下那样)。当然,如果您的IDE提供了良好的上下文自动完成功能,只需输入验证器类就足够了 - 因为在大多数情况下,消息常量是非常明显的。

另一种方法是用Zend_Form的魔术方法,并简单地通过“信息”键,作为参数传递给您的验证:

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

这将在内部引发Zend_Validate_Abstract来定义的setMessages()方法,并在本质只是为Zend_Form定义的一个快捷/节省时间的工具。

注意:ZF手册中有关于验证消息的dedicated section

0

你可以使用原来的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' 
     ) 
);