CakePHPには便利なバリデーションルールが沢山あるのですが、その中に「alphaNumeric」というルールがあります。これはマニュアルによると
半角のアルファベットか数字のみ許可されます。
と書かれています。これで半角英数字のチェックができる…と思うと「ほげほげ」という日本語がスルーしてしまいます。下記にその理由を。
なぜ、alphaNumericで日本語がスルーしてしまうのかというと、その部分のソースをチェックしてみると
function alphaNumeric($check) {
$_this =& Validation::getInstance();
$_this->__reset();
$_this->check = $check;
if (is_array($check)) {
$_this->_extract($check);
}
if (empty($_this->check) && $_this->check != '0') {
return false;
}
$_this->regex = '/^[p{Ll}p{Lm}p{Lo}p{Lt}p{Lu}p{Nd}]+$/mu';
return $_this->_check();
}
と書かれています。この中の
$_this->regex = '/^[p{Ll}p{Lm}p{Lo}p{Lt}p{Lu}p{Nd}]+$/mu';
の部分で正規表現のルールが書かれているのですが…こんなの見たことがありません。
そこでちょっと調べてみたらここに同じ疑問でバッチリ書いてありました。
バリデーションalphaNumericは全角も通ってしまう – ichiichininiblog
つまりalphaNumericは使っちゃダメということです。皆さんお気を付けて!
- 投稿タグ
- alphaNumeric, CakePHP, バリデーションルール