入力値チェックを行なうZend_Validateで追加されたクラス

By nakayama - 10/03/10 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

Zend Frameworkも正式公開から2年あまりが経ちまして、
ライブラリの機能もより充実してきました。

今回はZend_Validateで最近追加されたバリデーションクラスを紹介したいと思います。
単純な入力値のチェックではなくて、その値が規格に沿っているかをチェックしてくれるクラスが多く出てきています。

Zend_Validate_Barcode・・・バーコードの数字チェック

バーコードの規格に沿った値かどうか判断します。
今日現在下記規格に対応しています。
CODE25
CODE39
CODE39EXT
EAN2
EAN5
EAN8
EAN12
EAN13
EAN14
EAN18
GTIN12
GTIN13
GTIN14
IDENTCODE
INTELLIGENTMAIL
ISSN
ITF14
LEITCODE
PLANET
ROYALMAIL
SSCC
UPCA
UPCE

$valid = new Zend_Validate_Barcode(array(
    'adapter'  => 'EAN13',
    'checksum' => false,
));
if ($valid->isValid($input)) {
    // input appears to be valid
} else {
    // input is invalid
}

Zend_Validate_CreditCard・・・クレジットカードの値チェック

対応しているカード
American Express
China UnionPay
Diners Club Card Blanche
Diners Club International
Diners Club US & Canada
Discover Card
JCB
Laser
Maestro
MasterCard
Solo
Visa
Visa Electron

$valid = new Zend_Validate_CreditCard();
$valid->setType(array(
    Zend_Validate_CreditCard::AMERICAN_EXPRESS,
    Zend_Validate_CreditCard::VISA
));

Zend_Validate_Db_RecordExists・・・DBのレコードに値が存在するか

$validator = new Zend_Validate_Db_RecordExists(
    array(
        'table' => 'users',
        'field' => 'email',
        'adapter' => $dbAdapter //データベースアダプタ
    )
);

if ($validator->isValid($emailaddress)) {
    // メールアドレスは有効なようです
} else {
    // メールアドレスが無効なので、その理由を表示します
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

 
WHEREで条件を付けたい場合は『exclude』を使用します。

$clause    = $db->quoteInto('user_id = ?', $user_id);
$validator = new Zend_Validate_Db_RecordExists(
    array(
        'table' => 'users',
        'field' => 'email',
        'adapter' => $dbAdapter, //データベースアダプタ
        'exclude' => $clause
    )
);

if ($validator->isValid($emailaddress)) {
    // メールアドレスは有効なようです
} else {
    // メールアドレスが無効なので、その理由を表示します
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}