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/ […]