2017-03-03 76 views
0

我正在嘗試在自定義驗證規則中執行正則表達式,以允許除數字之外的任何字符,但無法正常工作。CakePHP 3正則表達式驗證

public function validationDefault(Validator $validator) 
{   
     $validator 
      ->requirePresence('username') 
      ->notEmpty('username', 'A username is required.') 
      ->alphaNumeric('username', 'A username must be alphanumeric.') 
      ->add('username', 'validChars',[ 
       //'rule' => ['custom', '([0-9])'], // PASSED - Excepts anything but must have a number. 
       'rule' => ['custom', '([^0-9])'], // FAILED - Excepts anything but NOT a number. 
       'message' => 'Excepts anything except a number.' 
      ]) 
      ->requirePresence('password') 
      ->notEmpty('password', 'A password is required.'); 

      return $validator; 
} 

感謝您的任何幫助。 Z.

+2

解釋**節選什麼,但不是一個數字。**用一個例子 –

+0

通過什麼我的意思是任何字符從所有的Unicode塊(https://unicode-table.com/en/blocks/)不是數字。 IE:使用alphaNumeric()過濾所有unicode塊字符以留下字母和數字,然後使用自定義規則取出數字,並且您接受了人名的輸入。 – Zenzs

回答

2

使用自定義的驗證規則,用匿名函數

public function validationDefault(Validator $validator) 
{   
    $validator 
     ->requirePresence('username') 
     ->notEmpty('username', 'A username is required.') 
     ->alphaNumeric('username', 'A username must be alphanumeric.') 
     ->add('username', 'validChars',[ 
      'rule' => function ($value, $context) { 
       return !preg_match('/[0-9]/', $value); //Return true if no number is present in the value  
      }, 
      'message' => 'Excepts anything except a number.' 
     ]) 
     ->requirePresence('password') 
     ->notEmpty('password', 'A password is required.'); 

     return $validator; 
} 
+0

完美運作。非常感謝。 – Zenzs