使用 Zend Framework addElement 时如何验证数字
How to validate digits when using Zend Framework addElement
我想在将 'validator' 子数组传递给函数时将验证器添加到表单元素,这样 phone 数字只接受数字。
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');
}
}
我收到以下错误:
2018-08-13T11:58:19+00:00 CRIT (2): Zend_Loader_PluginLoader_Exception: Plugin by name 'Num' was not found in the registry; used paths:
没有"Num"(或Zend_Validate_Num)这样的验证器,请尝试使用"Digits"。
您不需要下面的行,这会给您带来错误。
array('Num', true),
$this->phone->getValidator('Num')->setMessage('Phone number must be numeric.', 'notAlnum')
;
因为您正在使用正则表达式验证器
array('Regex', true, array('/^[0-9]+$/i')),
'Regex' 验证器只会验证数字在 0 到 9 之间,而您的 'StringLength' 验证器会验证有效 phone 数字所需的长度。
正如 Daniel 在另一个答案中指出的那样,Zend 中不存在 'Num' 验证器。
仅正则表达式验证器就足够了。请使用下面的 regax.You 不需要添加额外的 num 验证器。
^(+\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
希望对您有所帮助。
我想在将 'validator' 子数组传递给函数时将验证器添加到表单元素,这样 phone 数字只接受数字。
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');
}
}
我收到以下错误:
2018-08-13T11:58:19+00:00 CRIT (2): Zend_Loader_PluginLoader_Exception: Plugin by name 'Num' was not found in the registry; used paths:
没有"Num"(或Zend_Validate_Num)这样的验证器,请尝试使用"Digits"。
您不需要下面的行,这会给您带来错误。
array('Num', true),
$this->phone->getValidator('Num')->setMessage('Phone number must be numeric.', 'notAlnum')
;
因为您正在使用正则表达式验证器
array('Regex', true, array('/^[0-9]+$/i')),
'Regex' 验证器只会验证数字在 0 到 9 之间,而您的 'StringLength' 验证器会验证有效 phone 数字所需的长度。
正如 Daniel 在另一个答案中指出的那样,Zend 中不存在 'Num' 验证器。
仅正则表达式验证器就足够了。请使用下面的 regax.You 不需要添加额外的 num 验证器。
^(+\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
希望对您有所帮助。