我真的很感激一些帮助,这让我疯了。我试图以整数或小数形式(小数点后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组件。
答案 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')
))
)
));