2009-11-19 27 views
1

我正在考慮在我的Zend Framework應用程序的電話號碼字段中添加一些驗證/過濾。不知道這是我應該做還是不做。使用jQuery或Zend表單的電話號碼驗證器/過濾器?

我認爲這可能對用戶具有這樣的功能有所幫助,以便我可以強制執行特定的顯示格式。我不確定電話號碼的格式應該存儲在數據庫中,還是從數據庫中檢索。我不想過於嚴格,因爲這並不重要。我只是想阻止一半人輸入123.456.7890作爲他們的電話號碼格式,另一半輸入(123) 456-7890作爲其他格式。我希望電話號碼列表看起來一致。所以也許我應該使用一些JavaScript來幫助用戶輸入他們的號碼?也許有一個jQuery插件已經做到了,我可以將它與我的Zend Form整合?

您認爲如何?

回答

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()爲您的特定需求替代。

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