CakePHP1.2系(現時点で最新版は1.2.8)のバリデーションにおいて、半角英数のみを許可する「alphaNumeric」に不具合がある様で、日本語の全角をエラーにせずに許可してしまう様です。
詳細と回避方法は下記の通りです。
「alphaNumeric」が日本語を許可してしまう原因
CakePHPコア内にある「validation.php」の該当部分を確認してみます。
/cake/libs/validation.php
<?php 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(); } ?>
ソース内の正規表現処理部分で「\p{Lo}」という記述があるが、これは
【ヘブライ語や日本語などの大文字と小文字を持たない文字。】
という意味を持っている様です。
どうやらこの部分が全角文字を許可してしまう原因の様です。
CakePHPのコアファイルにはあまり手を入れたくない為、今回は別の方法で対処してみます。
CakePHPのバリデートで「半角英数のみ許可」を実現する方法
今回は独自バリデーションで「半角英数のみ許可」を実現してみました。
<?php class User extends AppModel { var $useDbConfig = 'default'; var $useTable = 'user'; var $name = 'User'; var $validate = array( 'password' => array( 'rule1' => array( //'rule' => 'alphaNumeric', 'rule' => array('custom', '/^[a-z\d]+$/i'), 'on' => null, 'message' => 'パスワードは半角英数字で入力してください' ), 'rule2' => array( 'rule' => VALID_NOT_EMPTY, 'on' => null, 'message' => 'パスワードが入力されておりません' ), ), ); } ?>
コメント
[…] [CakePHP]1.2系のバリデーション「alphaNumeric」の不具合 […]
[…] cakePHP1.3でalphaNumericが期待通りに動かない。全角が許可される。 libsディレクトリの中にあるvalidation.phpの正規表現がおかしいため。 参考URL↓ http://www.ryuzee.com/contents/blog/2274 http://blog.diginnovation.com/archives/250/ […]