2017-03-03 8 views
0

私は正規の正規表現を使って数字以外の文字を許可しようとしていますが、動作しません。CakePHP 3 regex validation

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

は** exceptsで何もなく、数を説明匿名関数で、カスタム検証ルールを使用してください。**例 –

+0

で何もすることで、私はすべてのUnicodeブロックから任意の文字を意味します(https://unicode-table.com/en/blocks/)は数値ではありません。 IE:alphaNumeric()を使用してすべてのユニコードブロック文字をフィルタリングして文字と数字を残し、その後カスタムルールを使用して数字を取り出し、人名の入力を受け入れました。 – 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