使用jQuery或Zend表单的电话号码验证器/过滤器?

时间:2009-11-19 00:26:46

标签: jquery zend-framework zend-form phone-number

我正在考虑在Zend Framework应用程序的电话号码字段中添加一些验证/过滤功能。不确定这是否是我应该做的事情。

我认为用户拥有这样的功能可能会有所帮助,因此我可以强制执行特定的显示格式。我不确定电话号码的格式是应该存储在数据库中,还是应该从数据库中检索。我不想对此过于严格,因为它并不是那么重要。我只是想阻止一半人以123.456.7890作为他们的电话号码格式,而另一半人以(123) 456-7890作为另一种格式输入。我希望电话号码列表看起来一致。那么也许我应该使用一些javascript来帮助用户输入他们的号码?也许有一个jQuery插件已经做到了,我可以将它与我的Zend Form集成?

您怎么看?

3 个答案:

答案 0 :(得分:3)

我最喜欢的建议之一:

JQuery Masked Input Plug-in

Screenshot

答案 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'));