【问题标题】:Zend Form Element Regex Validator seems to deny value when 0Zend Form Element Regex Validator 似乎在 0 时拒绝值
【发布时间】:2025-12-28 02:20:08
【问题描述】:

今天,我在 Zend Framework 应用程序中遇到了一个错误。是这样的:

我有一个带有正则表达式验证器元素的表单。在测试表单时,我发现我无法为元素提供值 0。 Zend 给我一个错误,告诉我我没有填写元素。

元素:

$element = $this->createElement( "text", "amount", array( "label" => "Amount", "required" => true ) );
$element->addValidator( 'regex', false, array( '/^[-]?([0-9]+)(([,.][0-9]+)+)?$/' ) );

谁能告诉我,当提交值为0时,Zend告诉我我没有填写元素可能是什么原因?

谢谢

【问题讨论】:

    标签: php zend-framework zend-form-element zend-validate


    【解决方案1】:

    很简单,当您将“required”设置为true 时,Zend_Form_Element 会自动在验证器堆栈的顶部添加一个notEmpty() 验证器。

    因此,任何 null、0、"" 等 值都被视为false,并且此验证器会为您的表单设置错误。

    查看手册了解更多信息:

    Zend_Validate_NotEmpty 的默认行为

    默认情况下,此验证器的工作方式与您工作时的预期不同 使用 PHP 的 empty() 函数。特别是,该验证器将 将整数 0 和字符串 '0' 都评估为空。

    $valid = new Zend_Validate_NotEmpty();
    $value  = '';
    $result = $valid->isValid($value);
    // returns false
    

    【讨论】: