CakePHPで半角のみ(英数記号のみ)のバリデーション

関数を通したい場合以下で通用するはず。

先輩からpreg_matchを使う場合は最後の/にはuを付け足すようご指摘をいただきました。ありがとうございます。

public function alphanumericsymbols($check){
    $value = array_values($check);
    $value = $value[0];
    return preg_match('/^[a-zA-Z0-9\s\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e]+$/u', $value);
}

おまけ:alphaNumericはあまり通用しないそう

【PHP】cakePHPバリデーションのalphaNumericが効かないこと

詳細は上記のページを!

以下のサイトが参考になりました。日本語はalphaNumericを通り抜けちゃうみたいで危険、だそうです。

以下のコードは一応英数字のみのつもりなのだが、日本語に対しては効かないそう。

$validator = new Validator();
$validator
 ->allowEmpty('user_id')
 ->add('user_id', [
  'alphaNumeric' => ['rule' => 'alphaNumeric', 'message' => '英数字のみです'],
  'length' => ['rule' => ['lengthBetween', 6,12],  'message' => '6~12文字です。']
  ]);