半角,全角スペースのみだとエラーにするバリデーションチェック
環境はCakePHP 1.2 releaseです
入力項目に名前の入力とかある場合、必須項目チェックだけだと半角/全角スペースだけ入力されるとバリデーションを通り抜けてしまい、DBには値がスペースのみ格納されてしまう。
これを避けるために、半角/全角スペースのみの場合にエラーとするバリデーション
app/app_model.phpに下記を記載
function space_only($field=array()){ foreach($field as $name => $value){} if( mb_ereg_match("^(\s| )+$", $value) ){ return false; }else{ return true; } }
(\s| )の箇所は全角スペースを入力してますのでご注意下さい。
モデルのファイルでバリデーション時に
var $validate = array( 'name' => array( "rule1" => array('rule' => array('space_only'), 'message' => '【お名前】 は空白以外の文字もご記入下さい' ), //"rule2" => array('rule' => VALID_NOT_EMPTY, "rule2" => array('allowEmpty' => false, 'required' => true, 'message' => '【お名前】 が未入力です' ), ), )
とすればOK。
半角、全角スペース混在でもエラーとしてます。
rule2で VALID_NOT_EMPTYを使っている理由は、notEmptyを使うと半角スペースのみの場合もエラーとなってしまい、半角スペースだけの入力時にエラーメッセージが「【お名前】 が未入力です」の方が出力されてしまうから(バリデーションは後に定義したほうが優先的にエラーメッセージとして出力される)
VALID_NOT_EMPTYは1.2ではマニュアルからも無くなっているのであまり使わないほうが良いかもしれませんが。
追記:VALID_NOT_EMPTYではなく、'allowEmpty' => falseにしました。
参考 http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1557&forum=6&post_id=3560#forumpost3560