仙台の山奥で自転車に乗ったり転んだり

愛車の GIOS でサイクリングしたりポタリングしたり、それをブログに記録してみたり。ロードバイクや自転車や坂のことを書いてみたり。ときたまプログラムのことを忘れないようにメモってみたり。

バリデーションの(preg_match関数で)エラー

モデルのバリデーションで↓のようなエラーが発生したら、ルールが未定義かtypoしているかのどっちか。

Warning (2): preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash [CORE/cake/libs/model/model.php, line 2506]

開発サーバだったので、2506行目でルール名を確認してすぐ特定できた。

} elseif (!is_array($validator['rule'])) {
    var_dump($rule);
    $valid = preg_match($rule, $data[$fieldName]);
}

ルールが、

  1. モデル自身のクラスメソッドではなく
  2. behaviorに実装したメソッドでもなく
  3. CakePHPの組み込みルール(Validationクラスのメソッド)でもなく
  4. 値が配列であれば正規表現の検索パターン文字列として評価する

というロジックで発生する事象。