http://framework.zend.com/manual/ja/zend.validate.html
いわゆるひとつのバリデータです。
入力形式が整数か、メールアドレスの形式として正しいか、IPアドレスの形式として正しいか、クレカの形式の形式として正しいか、といったチェックを行うことができます。
本来の使い方としてはZend_Validate_Digits、Zend_Validate_EmailAddress等個別のバリデータをインクルードして、といった形なのですが、そんなの面倒でやってられないのでZend_Validateから全て静的に呼び出せるようになっています。
こういう実装は伝説のFactoryMethodパターンなんじゃないかと思うのですがよくわかりません。
それはまあ便利なのですが、この場合は欠点としてバリデータチェインが使用できません。
逆にバリデータチェインを行う場合は、各バリデータを手動でインクルードしないとエラーになってしまいます。
zend_validate.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
//チェックする文字列
$string='abc012';
//Zend_Validate
require_once('Zend/Validate.php');
//静的にバリデート
//必要なファイルは自動的に呼び出してくれる
Zend_Validate::is($string, 'StringLength',array(6,12)); //trueになる
Zend_Validate::is($string, 'Alpha'); //falseになる
//メソッドチェーンでバリデート
//こちらの場合必要なファイルを全部インクルードしないとエラーになる
require_once('Zend/Validate/StringLength.php');
require_once('Zend/Validate/Alpha.php');
//バリデートチェイン
$validator=new Zend_Validate();
$validator
->addValidator(new Zend_Validate_StringLength(6, 12))
->addValidator(new Zend_Validate_Alpha());
$ret=$validator->isValid($string);
//失敗した場合エラーメッセージを取得できる
if(!$ret){
$error_message=$validator->getMessages();
}
|
このように、静的バリデートは使用は簡単ですが'6~12文字かつアルファベット'といった表現に弱く、逆にインスタンスを生成する場合は毎回個別バリデータをインクルードする必要があって面倒です。
毎回インクルードしまくるか、毎回静的に呼び出しまくるかの二択になってしまいます。
もうちょっとどうにかならなかったんでしょうか。
バリデータには通常使われる文字数やメールアドレスといったもの以外にも、16進文字やIBANコードなど珍しいものまでありますが、英語圏出身にふさわしく日本語関連のものはありません。
全角のみ、といったバリデータは自分で実装する必要があります。
また不注意にZend_Validate::is('あ', 'StringLength',array(3,3))とかやってしまうとtrueになってしまったりすることがあるので注意が必要です。
Zend_Validate_StringLengthの文字数比較はiconv_strlen()という見慣れぬ関数で行われており、これのデフォルトがISO-8859-1なので、'あ'がUTF-8だったら3文字と判断されてしまいます。
Zend_Validate_StringLengthを使用する場合は必ず何処かに
iconv_set_encoding('internal_encoding','UTF-8');
と書いておきましょう。
どうでもいいけど住所や電話番号欄に「全角のみ」ってバリデータは百害あって一利なし。
PR
トラックバック
トラックバックURL: