我正在考虑在Zend Framework应用程序的电话号码字段中添加一些验证/过滤功能。不确定这是否是我应该做的事情。
我认为用户拥有这样的功能可能会有所帮助,因此我可以强制执行特定的显示格式。我不确定电话号码的格式是应该存储在数据库中,还是应该从数据库中检索。我不想对此过于严格,因为它并不是那么重要。我只是想阻止一半人以123.456.7890
作为他们的电话号码格式,而另一半人以(123) 456-7890
作为另一种格式输入。我希望电话号码列表看起来一致。那么也许我应该使用一些javascript来帮助用户输入他们的号码?也许有一个jQuery插件已经做到了,我可以将它与我的Zend Form集成?
您怎么看?
答案 0 :(得分:3)
答案 1 :(得分:2)
您仍然希望在后端强制执行验证,因为可以轻松绕过javascript验证。这是我的验证插件强制+1.1234567890:
class App_Validate_Phone extends Zend_Validate_Abstract
{
const NOT_VALID = 'phoneInvalid';
protected $_messageTemplates = array(
self::NOT_VALID => "Phone number '%value%' must be in the format +COUNTRYCODE.PHONENUMBER. Example: +1.4071234567"
);
public function isValid($value)
{
$this->_setValue($value);
if (!preg_match('/^\+([0-9]+)\.([0-9]+)$/',$value)) {
$this->_error(self::NOT_VALID);
return false;
}
return true;
}
}
如果您使用谷歌手机验证正则表达式,您可以找到任意数量的验证正则表达式,您可以在 preg_match()中替换它以满足您的特定需求。
答案 2 :(得分:0)
您不需要为手机创建自定义验证器。 Zend建议使用本地化的电话验证器。虽然尚未准备好,但您可以使用Regex验证器:
//Add element for phoneNumber1
$this->addElement('text', 'phoneNumber1', array(
'label' => 'Primary Phone Number',
'required' => false,
));
$phone1 = $this->getElement('phoneNumber1');
$phone1->addValidator('regex', false, array('pattern' => '^[2-9][0-9]{2}-[0-9]{3}-[0-9{4}$', 'messages' => 'Enter a valid Phone Number'));