Webサービス開発、あるよ
Webサービス開発、あるよ
2009.07.10

バリデーションルールの書き方

まっちー

CakePHPにはデフォルトでいくつかのバリデーションルールがあるので、それを使えばメールアドレスの判定やら必須項目のところが空になっているかどうかの判定やらが簡単にできる。

特に正規表現だか何だかを使ってメールアドレスの判定をするのはかなり大変らしい。以前、どこかのサイト(どこだったかはちょっと忘れちった)でメールアドレスの判定のための正規表現が書かれているのを拝見させてもらったことがあるけれど、もんのすごい長くて正直見るのが嫌になった。あれはもうソースコードのレベルじゃねえよ。ページ全体が文字化けしているサイトを見ているような感覚に近いかもしれない。

まあそれはいいとして、デフォルトにあるバリデーションを使おうという話なのだけど、その中にnumericという入力された値が数字かどうかを判定するルールがある。このルールを設定しておくと、数字以外が入力された場合にエラーと判断する。

今、入力フォームに電話番号を入力する項目があるとする。必須項目で、ハイフンは入力しない。

で、値が空だった場合と不正な入力があった場合とで別々のメッセージを出したいとする。

var $validate = array('email' =>

array('notEmpty' =>

array('rule' => 'notEmpty',

'message' => '電話番号を入力してください',

),

'numeric' =>

array('rule' => 'numeric',

'message' => '電話番号の入力が不正です',

'allowEmpty' => true,

)));

一つの項目に複数のルールを書く場合は、こんなような書き方をする。

さてさて、実は上記の書き方だと、notEmptyの方のルールは思ったより何の効力も発揮しない。というのは、どうやらnumericというバリデーションのルールは入力値が数字以外のときだけでなく、空の値も許容しないルールらしいので、このままだと値が空のときにも『電話番号の入力が不正です』って言われてしまう。

まあ、それでも問題ないといえばないような気がしないでもないけど、できれば空のときには『未入力です』的なメッセージを出したい。

var $validate = array('email' =>

array('notEmpty' =>

array('rule' => 'notEmpty',

'message' => '電話番号を入力してください',

),

'numeric' =>

array('rule' => 'numeric',

'message' => '電話番号の入力が不正です',

'allowEmpty' => true,

)));

allowEmptyというのは、空の値を許容するかどうかの設定をするもので、trueは許容するということを意味する。だからこう書けばnumericの方は空の値のときにはエラーメッセージを出さないようになるので、その場合には『電話番号を入力してください』の方のメッセージが出る。

よかったよかった……と言いたいところだけど、この電話番号の項目は必須項目なわけで、基本的に空の値は許容しない項目なのに、わざわざこういう書き方をするのはいかがなものだろうという気がしないでもないですよね。

こういうときは自分で独自のルールを書く方が良いのだろうか。でもそれもめんどいよねぇ……。

U Y A
K A