使用Zend Framework addElement时如何验证数字

时间:2018-08-13 12:01:21

标签: zend-framework socialengine

我想通过将'validator'子数组传递给函数,从而在将其添加到表单元素时在表单元素中添加一个校验器,以便电话号码仅接受数字。

Uncaught SyntaxError: missing ) after argument list
at new Function (<anonymous>)

我收到以下错误:

    class User_Form_Signup_Phone extends Engine_Form {
    public function init() {
        $settings = Engine_Api::_()->getApi('settings', 'core');

        $this->addElement('Text', 'phone', array(
            'label' => 'Phone Number',
            'description' => $description,
            'required' => true,
            'allowEmpty' => false,
            'validators' => array(
                array('NotEmpty', true),
                array('Num', true),
                array('StringLength', true, array(10, 11)),
                array('Regex', true, array('/^[0-9]+$/i')),
            ),
//            'tabindex' => $tabIndex++,
                //'onblur' => 'var el = this; en4.user.checkUsernameTaken(this.value, function(taken){ el.style.marginBottom = taken * 100 + "px" });'
        ));
        $this->phone->getDecorator('Description')->setOptions(array('placement' => 'APPEND', 'escape' => false));
        $this->phone->getValidator('NotEmpty')->setMessage('Please enter a valid phone number.', 'isEmpty');
        $this->phone->getValidator('Regex')->setMessage('Invalid phone number.', 'regexNotMatch');
        $this->phone->getValidator('Num')->setMessage('Phone number must be numeric.', 'notAlnum');

   }
  }

3 个答案:

答案 0 :(得分:1)

没有诸如“ Num”(或Zend_Validate_Num)之类的验证器,请尝试使用“ Digits”代替。

答案 1 :(得分:1)

您不需要以下几行就可以给出错误信息。

array('Num', true),

$this->phone->getValidator('Num')->setMessage('Phone number must be numeric.', 'notAlnum');

使用正则表达式验证器时

array('Regex', true, array('/^[0-9]+$/i')),

仅当数字介于0到9之间并且“ StringLength”验证器将验证为有效电话号码所需的长度时,“ Regex”验证器才会进行验证。

正如丹尼尔(Daniel)在另一个答案中指出的那样,“数字”验证器在Zend中不存在。

答案 2 :(得分:1)

仅正则表达式验证器足以满足您的需求。请使用下面的regax。您不需要添加额外的数字验证器。

^(+ \ d {1,2} \ s)?(?\ d {3})?[\ s .-] \ d {3} [\ s .-] \ d {4} $ 符合以下条件

123-456-7890 (123)456-7890 123 456 7890 123.456.7890 +91(123)456-7890

希望会有所帮助。