(メール・URL・電話・郵便・IP) データ バリデーション

今回は、プロフィール情報に使用されるデータに絞ったバリデーションルールです。
バリデーションルール
以下の5つのバリデーションルールがコアに用意されています。
- email メールアドレス
- url URL
- postal 郵便番号
- phone 電話番号
- ip IPアドレス
email (メールアドレス)
email(string $check, boolean $deep = false, string $regex = null)
第2引数$deepがtrueの場合、getmxrrもしくはcheckdnsrrもしくはgethostbynamelを使用してドメインの有無まで検証してくれます。第3引数$regexに正規表現を使用してドメインを限定してくれます。
public $validate = array( 'mailaddress' => array( 'rule' => array( 'email'), // 'rule' => array( 'email', true), // ドメイン有無を検証 // 'rule' => array( 'email', true, '\gmail.com\'), // gmail.comのみ許可 'message' => 'メールアドレスを入力して下さい。', 'allowEmpty' => true // 空白許可 ), );
url (URL)
url(string $check, boolean $strict = false)
http(s), ftp(s), file, news, gopherをサポート。第2引数$strict がtrueの場合、http://などプロトコルまで求めます。
public $validate = array( 'website' => array( // プロトコルまで必要なし 'rule' => array( 'url'), // kwski.net // プロトコルまで必要 // 'rule' => array( 'url', true), // http://kwski.net 'message' => 'URLを入力して下さい。', 'allowEmpty' => true ), );
postal (郵便番号)
アメリカ(us)、カナダ(ca)、イギリス(uk)、イタリア(it)、ドイツ(de)、ベルギー(be)の郵便番号のフォーマットが用意されているだけなので、日本版につくってみましょう。正規表現が使用できるcustomルールを使用します。
public $validate = array( 'postal' => array( // ハイフン必須 'rule' => array( 'custom', '/^[0-9]{3}-[0-9]{4}$/'), // ハイフンがあってもなくてもいい // 'rule' => array( 'custom', '/^[0-9]{3}[\s-]?[0-9]{4}$/'), 'message' => 'postal error', 'allowEmpty' => true ),);
CakePHP Localized pluginを参考にさせてもらいました。こちらのプラグインをインストールすれば、日本用の郵便番号のルールが使用できます。
phone (電話番号)
アメリカの電話番号フォーマットを検証 になるので、こちらも日本用にcustomを使用してつくってみましょう。電話番号は、様々なパターンがあると思うので、正規表現内の数字を変えつつ調整してもらったほうがいいと思います。
下の例では、
0xxx-xxxx-yyyy (xの個数は可変)
になります。
public $validate = array( 'phone' => array( // ハイフン必須 'rule' => array( 'custom', '/^(0\d{1,4}-\d{1,4}-\d{4})$/'), // ハイフンがあってもなくてもいい // 'rule' => array( 'custom', '/^(0\d{1,4}[\s-]?\d{1,4}[\s-]?\d{4})$/'), 'message' => 'phone error', 'allowEmpty' => true ), );
こちらもCakePHP Localized pluginに日本版が用意されています。
ip (IPアドレス)
ip(string $check, string $type = 'both')
第2引数$typeで、両方、IPv4のみ、IPv6のみを制限できます。
public $validate = array( 'defaulgateway' => array( 'rule' => array( 'ip', 'both'), // 両方OK // 'rule' => array( 'ip', 'IPv4'), // IPv4のみOK // 'rule' => array( 'ip', 'IPv6'), // IPv6のみOK 'message' => 'IPアドレスを入力して下さい。', 'allowEmpty' => true ), );
関連記事
-
-
DebugKitを導入
定番のブログチュートリアルをこなして、定番のDebugKitを導入してみました。 2.3からはCakePHPインストール直後に以下のように導入を推奨するような警告メッセージが表示されるようになりまし
-
-
多言語サイト向けに翻訳ファイルを使って翻訳を行う
CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook
-
-
checkボックスを実装
selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TA
-
-
SQLクエリーをログに出力する
SQLのクエリーをデバッグするには、Debug Kitを使用すればできますが、デバッグログと一緒に出したいのでやり方を調査してみました。 別々のログやビューでみるのもいいですが、秒単位で実行される処
-
-
FormヘルパーのMagicOption (マジックオプション)
Formヘルパーでは、「フィールド名」,「テーブルカラムのデータ型」もしくはモデルの「バリデーション設定」によりフォーム要素を決定したり、自動で属性を付与する「マジックオプション」と呼ばれるものがある
-
-
CakeEmailでメール送信(@gmail)
CakePHP 2になって追加されたクラスCakeEmailがシンプルに使えます。これを使用してメール送信を行う処理を実装してみました。 CakeEmailクラスの読み込み /app/Config
-
-
Jsヘルパーを使用してAjax更新
更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。デモ head
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
Markdown Plugin
「Markdown CakePHP Plugin」は、MarkDown書式をレンダリングしてくれるビューヘルパーです。MarkDownについて勉強しているうちに出会ったので試し打ちです。 ダウンロー
-
-
パス定数と変更方法やURLの取得
CakePHPは基本的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。
Comment
(メール・URL・電話・郵便・IP) データ バリデーション https://t.co/j3uyNVyypi
CakePHP 2.x | (メール・URL・電話・郵便・IP) データ バリデーション http://t.co/VOcYi6lxWL