1

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

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

你怎么看?

4

3 回答 3

3

我最喜欢的建议之一:

JQuery 屏蔽输入插件

截屏

于 2009-11-19T00:30:08.227 回答
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()中替换它们以满足您的特定需求。

于 2009-11-19T15:59:00.133 回答
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'));
于 2010-07-02T20:57:24.093 回答