zend验证器正则表达式的数字有问题 - 整数或可选的浮点数

时间:2010-11-23 14:52:17

标签: php zend-form zend-validate

我真的很感激一些帮助,这让我疯了。我试图以整数或小数形式(小数点后2位)验证由zend形式提交的数字,允许0或0.00但不是空输入。

$form->element->addValidator ('regex', false, array(
  'pattern'=>'/^\d+(\d{1,5})?(\.\d{1,2})?$/', 
  'messages'=>array(
   'regexInvalid'=>'required',
   'regexNotMatch'=>'number required')
  )
);

出于某种原因,像100.00这样的浮点生成以下验证错误消息: “'100.00'包含不是数字的字符;但只允许数字”。不会生成regexNotMatch消息或regexInvalid消息,这是我所期望的。

这个验证错误消息似乎是由数字验证器生成的,我没有打电话是否有什么东西可以阻止它进入?

此外,空输入不会生成任何验证错误消息。

如果我尝试像'rt67'这样的字符串,我的regexNotMatch消息会正确显示。

如果这有任何不同,我使用没有mvc的zend组件。

3 个答案:

答案 0 :(得分:1)

我正在调用数字验证器,因此它实际上没有问题。我已经通过简单地使用setRequired来接受接受空输入。这是一个令人惊奇的夜晚睡眠可以做!但是,如果有人知道为什么正则表达式接受空输入,我将不胜感激。

答案 1 :(得分:0)

为什么不使用Zend_Validate_Float和/或Zend_Validate_Int?

答案 2 :(得分:0)

添加

$form->element->setRequired();

禁止空投入。

您的代码有效,请检查其他附加的验证器。我用它像

    $this->addElement('text','price', array(
        'label'      => 'Price:',
        'filters'    => array('StringTrim'),
        'required'   => true,
        'requiredSuffix'=>'*',
        'size'       => 10,
        'maxlength'     => 10,
        'validators' => array(
            array('validator' => 'Regex', 'options' => array(
                'pattern'=>'/^\d+(\d{1,5})?(\.\d{1,2})?$/', 
                  'messages'=>array(
                   'regexInvalid'=>'required',
                   'regexNotMatch'=>'number in money format (x.xx) is required')
            ))
        )
    ));