
CakePHPのバリデーションで、日本語の文字数チェックする関数を作ってみた。
2013/07/01
前日の改行を削除するルーチンを踏まえて、CakePHPのバリデーション時に日本語の文字数をチェックする関数を作ってみたので公開。
ちなみに、CakePHP1.3で使っていましたが、2.x でも使えると思います。
toogieは、どのモデルのバリデーションからでも使いたかったので、app_modelに記述していますが、ビヘイビアにしたほうが良いのかも、という気もします。
[php]
function maxLengthJP( $wordvalue, $length )
{
if ( is_array($wordvalue) ) {
// $wordvalueはキーがモデル名の連想配列のためforeachで対応
foreach ( $wordvalue as $key => $value ) {
// 改行を削除し、純粋な文字数とする
$value = str_replace(array("\r\n","\n","\r"), '', $value);
return(mb_strlen($value, mb_detect_encoding($value)) <= $length);
}
} else {
return( mb_strlen($wordvalue, mb_detect_encoding($wordvalue)) <= $length );
}
}
[/php]
バリデーション対象のモデルからはモデルからは以下のようにしてコールすれば、bool値が返ります。
[php]
var $validate = array(
'comment' => array(
array(
'rule' => 'notEmpty',
'message' => '『コメント』を入力して下さい。',
'required' => true,
'allowEmpty' => false,
),
array(
'rule' => array('maxLengthJP', "3000"),
'message' => '『コメント』は3,000文字以内で入力して下さい。',
),
)
);
[/php]
[tgAmazonItemLookup asin="B00960YR3Q" related="1"]