前日ポストした改行を削除するルーチンを踏まえて、CakePHPのバリデーション時に日本語の文字数をチェックする関数を作ってみたので公開。
ちなみに、CakePHP1.3で使っていましたが、2.x でも使えると思います。
わたしはどのモデルのバリデーションからでも使いたかったので app_modelに記述していますが、ビヘイビアにしたほうが良いのかも、という気もします。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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); } } |
バリデーション対象のモデルからはモデルからは以下のようにしてコールすれば、bool値が返ります。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
var $validate = array('comment' => array( array( 'rule' => 'notEmpty', 'message' => '『コメント』を入力して下さい。', 'required' => true, 'allowEmpty' => false ), array( 'rule' => array('maxLengthJP', "3000"), 'message' => '『コメント』は3,000文字以内で入力して下さい。' ) )); |
なるほどですね。

