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

发布于 2024-10-03 19:32:43 字数 614 浏览 3 评论 0原文

我真的很感激一些帮助,这让我发疯。我正在尝试验证 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 组件。

I'd really appreciate some help with this its been driving me nuts. I'm trying to validate numbers submitted by a zend form either in the form of integers or decimals (2 decimal places) allowing for 0 or 0.00 but not empty inputs.

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

For some reason a float like 100.00 generates the following validation error message:
"'100.00' contains characters which are not digits; but only digits are allowed". The regexNotMatch message or regexInvalid message aren't generated which is what I'd expect.

This validation error message seems to be generated by the digits validator which I'm not calling is there something I can do to stop it kicking in?

Also empty inputs aren't generating any validation error messages.

If I try a string like 'rt67' my regexNotMatch message is displayed correctly.

I'm using zend components without the mvc if this makes any difference.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月竹挽风 2024-10-10 19:32:43

我正在调用数字验证器,所以实际上没有问题。我已经解决了通过简单地使用 setRequired 来接受空输入的问题。一夜睡眠的功效真是令人惊奇!不过,如果有人知道为什么正则表达式接受空输入,我将不胜感激。

I was calling the digit validator so there wasn't actually a problem with it. I've worked around the acceptance of empty inputs being accepted by simply using setRequired. Its amazing what a nights sleep can do! I would however be grateful if anyone knows why the regex accepted empty input.

白况 2024-10-10 19:32:43

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

Why not use Zend_Validate_Float and/or Zend_Validate_Int?

尹雨沫 2024-10-10 19:32:43

添加

$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')
            ))
        )
    ));    

Add

$form->element->setRequired();

to ban empty inputs.

You code works, check other attached validators. I used it like

    $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')
            ))
        )
    ));    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文