データのバリデーション -> rule 編

Posted by muchag | CakePHP | 2011-07-03 (日) 18:16:33

rule はボリュームが多いので
別ページにしてみた。

たくさんあって、さっぱり覚えられない・・・。

【環境】
[CakePHP] 1.3.8

ルール内容を記述する場所。

内容は定義済みルールでも独自ルールでも可能。
 

定義済みルール

The CakePHP 1.3 Book:4.1.4 組み込みのバリデーションルール(Validation Rules)
下記参考元サイトの方が見易い。

<参考元サイト>
CakePHPまとめ:Validation(バリデ-ション)
CSS テンプレートガイド:CakePHPに組み込みのバリデーションルールをまとめた表
 

独自ルール
正規表現によるバリデーション

The CakePHP 1.3 Book:4.1.5.1 独自の正規表現による定義

  1. 'rule' => array('custom', '/[a-z0-9]{3,}$/i'),

などのように記述。
 

エスケープ

独自ルールで正規表現を用いる場合
中身に以下の半角記号を入れたい場合はエスケープする。

  • / (スラッシュ)
    正規表現の最初と最後に配置する記号なので、ここで終わりと勘違いされる
  • \ (バックスラッシュ、場合によっては円マーク)
    正規表現でエスケープに用いる記号なので、次の文字のエスケープと勘違いされる
  • ]
    正規表現でパターン列挙に用いるカッコなので、ここで終わりと勘違いされる
  • $ (ドルマーク)
    正規表現で文末を表す記号なので、ここが文末と勘違いされる
  • (シングルクォーテーション)
    PHP で文字列を括る記号なので、ここが文字列末と勘違いされる
  • (ダブルクォーテーション)
    PHP で文字列を括る記号なので、ここが文字列末と勘違いされる

※ シングルクォーテーションとダブルクォーテーションは、どちらを用いているかによる
※ その他もどのように記述しているかによる

  1. 'rule' => array('custom', '/[^@-\/]$/i'),

 
これを忘れると、スラッシュの場合は

preg_match() [function.preg-match]: Unknown modifier ‘]’

こうなる。

シングルクォーテーションとダブルクォーテーションの場合は Syntax Error 。

他のはスルーされた。

今回試したパターンで発見できたものだけなので
他にもあると思う。
 

バックスラッシュの場合

ちなみに、\ (バックスラッシュ、場合によっては円マーク)を文字列挙の最後にするときは

  1. 'rule' => array('custom', '/[^@-\\]$/i'),

とすると

preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 11

こうなってしまうので

  1. 'rule' => array('custom', '/[^@-\\\]$/i'),

こうするか、場所を変えたらちゃんと動作した。
 

独自メソッドによるバリデーション

The CakePHP 1.3 Book:4.1.5.2 独自のバリデーションメソッド
public $validate = array(
‘promotion_code’ => array(
‘rule’ => array(‘limitDuplicates’, 25),
‘message’ => ‘この販促コードは使い切りました。’
)
);

private function limitDuplicates($data, $limit)
{
$existing_promo_count = $this->find( ‘count’, array(‘conditions’ => $data, ‘recursive’ => -1) );

return $existing_promo_count < $limit; }[/php]

CakePHP | 2011-07-03 (日) 18:16:33 |

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment