[CakePHP]1.2系のバリデーション「alphaNumeric」の不具合

自由が丘で働くWeb屋のブログ

[CakePHP]1.2系のバリデーション「alphaNumeric」の不具合

alpha_numeric

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' => 'パスワードが入力されておりません'
			),
		),
	);
}
?>
 
カテゴリー:Webシステム開発
タグ:,
2010年10月12日 15時14分
 

関連記事

 

この記事へのコメント

コメントを書く

(C) 自由が丘で働くWeb屋のブログ