端くれプログラマの備忘録 CakePHP [CakePHP] 日本語をはじくalphaNumericを実装する

[CakePHP] 日本語をはじくalphaNumericを実装する

ネットの記事によると、CakePHPのバリデーションルール「alphaNumeric」は日本語をはじかないらしい。

試してみる。

// モデル定義
class Personal extends AppModel {
    public $validate = array(
        'name' => array(
            'empty' => array(
                'rule' => 'notBlank',
                'message' => '名前は必ず入力してください',
            ),
            'alphanum' => array(
                'rule' => 'alphanumeric',
                'message' => '名前は英数字のみで入力してください',
            )
        ),
        'password' => array(
            'rule' => 'notBlank',
            'message' => 'パスワードは必ず入力してください',
        ),
    );
}

半角記号を混ぜたらバリデーションエラーになった。これはOK。

cakephp-alphanumeric-1

ひらがなを混ぜたらエラーにならず。これはNG。

cakephp-alphanumeric-2

日本語ユーザ向けのシステムでは対処しないとマズイ。

対処法は日本語をはじくようにalphaNumericの実装を上書きすれば良い。

// モデル定義
class Personal extends AppModel {
    ....
    public function alphaNumeric($check) {
        $value = array_values($check);
        $value = $value[0];
        return preg_match('/^[a-zA-Z0-9]+$/', $value);
    }
    ....
}

参考サイト

CakePHP2.xでvalidationルールで日本語がチェックされない – Qiita
http://qiita.com/ykirishima/items/9e71a6233058600ec2ea

CakePHPのバリデーションルール「alphaNumeric」は要注意! | アイビースター
http://ivystar.jp/programming/php/cakephp-php-programming/cakephp%E3%81%AE%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%AB%E3%80%8Calphanumeric%E3%80%8D%E3%81%AF%E8%A6%81%E6%B3%A8%E6%84%8F%EF%BC%81/