2013-04-08 3 views
1

У меня проблема с моим входным фильтром в ZF2. Я хочу inputfilter, который позволяет только цифры и отступы (-). Как я могу это сделать? Я Allready следующий код:Inputfilter для phonenumber Zend (regex)

  $inputFilter -> add($factory -> createInput(array(
      'name' => 'phonenumber', 
      'required' => false, 
      'filters' => array(
       array('name' => 'Int'), 
      ), 
      'validators' => array(
       array(
        'name' => 'regex', false, 
        'options' => array(
         'pattern' => '/\([0-9]{3}\)\s[0-9]{3}-[0-9]{4}/', 
         'messages'=>array(\Zend\Validator\Regex::NOT_MATCH=>'%value% is not a valid phone' 
         ), 
        ), 
       ), 
      ), 
     ))); 

ответ

0

Изменить свой шаблон для /^[\d-]+$/ - это должно помочь.

+0

Это правильный шаблон, я думаю, но как правильно установить валидатор. Я думаю, что это неправильный путь, пока он не работает. – Haidy

1

Для телефонных номеров, я создал свой собственный файл Zend_Validate_Phone, который идет как это:

<?php 
/** 
* Zend_Validate_Phone 
* 
* A validator that can be used in Zend_Form to validate phone numbers 
* Accepts only north-american form numbers 
* 
* Accepted: 
* (819)800-0755 
* 819-800-0755 
* 8198000755 
* 819 800 0755 
*/ 

/** 
* @see Zend_Validate_Abstract 
*/ 
require_once 'Zend/Validate/Abstract.php'; 

class Zend_Validate_Phone extends Zend_Validate_Abstract 
{ 
    const INVALID  = 'phoneInvalid'; 
    const STRING_EMPTY = 'phoneStringEmpty'; 

    /** 
    * Validation failure message template definitions 
    * 
    * @var array 
    */ 
    protected $_messageTemplates = array(
     self::INVALID  => "Invalid phone number. Make sure this is a valid north american phone number (xxx)xxx-xxxx", 
     self::STRING_EMPTY => "'%value%' is an empty string", 
    ); 

    /** 
    * Sets default option values for this instance 
    * 
    * @return void 
    */ 
    public function __construct() { 

    } 

    /** 
    * Defined by Zend_Validate_Interface 
    * 
    * Returns true if and only if $value contains a valid phone number 
    * 
    * @param string $value 
    * @return boolean 
    */ 
    public function isValid($value) {  
     //A regex to match phone numbers 
     $pattern = "((\(?)([0-9]{3})(\-| |\))?([0-9]{3})(\-)?([0-9]{4}))"; 

     //If regex matches, return true, else return false 
     if(preg_match($pattern, $value, $matches)) { 
      //Valid phone number 
      $isValid = true; 
     } else { 
      $this->_error(self::INVALID); 
      $isValid = false; 
     } 


     return $isValid; 
    } 

} 

я затем использовать его как и любые другие валидаторов ... Надеюсь, что это помогает!

+0

Пойдем посмотреть это сегодня, спасибо;) – Haidy

Смежные вопросы