【问题标题】:Zend Form can't validate float numberZend Form 无法验证浮点数
【发布时间】:2015-09-10 20:58:49
【问题描述】:

我有这个表单元素:

$this->addElement('text', 'prezzo', array(
        'label' => 'Prezzo (*)',
        'filter' => '',
        'description' => 'Il prezzo non è comprensivo di sconto, ma se previsto verrà calcolato',
        'required' => true,
        'validators' => array('Float'),
        'placeholder' => 'Prezzo Pneumatico',
        'class' => 'form-control'
    ));

如果我输入这样的数字24.50,我会在验证时出错,而如果我输入这样的数字24,50,我不会收到任何错误。

我认为问题在于我的Bootstrap.php 中的Zend_Locale 我设置了这个值:

protected function _initLocale() {
    $locale = new Zend_Locale ( 'it' );
    Zend_Registry::set ( 'locale', $locale );
}

可能的一种解决方案是过滤输入并将'.' 替换为','。 你能帮帮我吗?

【问题讨论】:

  • 通过使用javascript,当提交事件开始时,将您的浮点数转换为字符串,用逗号替换点然后将其转换回浮点数(如果没有自动进行转换)。

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


【解决方案1】:

如果您想在 en locale 中进行验证,例如24.50locale option 设置为您的验证器。

$this->addElement('text', 'prezzo', array(
    'label' => 'Prezzo (*)',
    'filter' => '',
    'description' => 'Il prezzo non è comprensivo di sconto, ma se previsto verrà calcolato',
    'required' => true,
    'validators' => array(array('Float', true, array('locale' => 'en'))),
    'placeholder' => 'Prezzo Pneumatico',
    'class' => 'form-control'
));

【讨论】:

  • 这样我得到这个错误:Invalid validator passed to addValidators()
  • 哦,我错过了验证器必须在数组中。
【解决方案2】:

我是这样解决的:

<script type="text/javascript">
$(function(){
    $('form[name=pneumatico]').find('input[name=prezzo]').keyup(function() {
        $(this).val($(this).val().replace('.', ','));
    });
    $('form[name=pneumatico]').find('input[name=sconto]').keyup(function() {
        $(this).val($(this).val().replace('.', ','));
    });
}); </script>

谢谢

【讨论】:

    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多