軽量なバリデーションライブラリ

こんにちは、 PHP 担当の高杉です。
みなさんは入力値のチェックをどのようにしていますか?サーバ側で一括に行ったり
JavaScript で一括で行ったり、または、両方でチェックを行ったり。
結構、どのように実装するか悩みます。
そこで、今回は LiveValidationPHP を紹介したいとおもいます。
この LiveValidationPHP は、「LiveValidation」という JavaScript のライブバリデーションライブラリをラッピングした PHP のバリデーションライブラリです。
これを用いると、 JavaScript を(ほぼ)全く用いずに、 PHP を記述するだけでライブバリデーションとサーバサイドのバリデーションをまとめて実装することができます。
インストール
インストール方法は、ダウンロードして展開するだけです。
ダウンロードページはこちら:
http://livevalidationphp.leihitu.nl/index.php?page=downloads
サンプル
JS ライブラリの livevalidation.js と、 livevalidation.js から使用されるサンプル CSS も同梱されています。展開したライブラリの中から
- livevalidationphp.class.php
- livevalidation/livevalidation.js
- livevalidation/livevalidation.css
をコピーして、同階層に以下のようなサンプルスクリプトを作成します。
<?php
require_once "livevalidationphp.class.php";
require_once "validateRule.php";
$testLiveForm = new LiveValidationMassValidatePHP("testForm", $_POST);
$testLiveForm->addRules($formRules["formTest"]);
$html = $testLiveForm->generateAll();
$testFormErrors = array();
if (isset($_POST["action"]) && $_POST["action"] == "send_test_form") {
$testFormErrors = $testLiveForm->validate();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>LiveValidationPHP サンプル</title>
<link href="livevalidation/livevalidation.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="livevalidation/livevalidation.js"></script>
<script type="text/javascript"><!--
window.onload = function() {
<?php print $html; ?>
}
//-->
</script>
</head>
<body>
<h1>LiveValidationPHP サンプル</h1>
<?php
if (count($testFormErrors)) {
foreach ($testFormErrors as $errorMessage) {
print "<p>Error=> $errorMessage </p>\n";
}
}
?> <form name="formTest" id="formTest" action="testValidation.php" method="post">
<p>「あいうえお」と入力してください。: <input type="text" name="aiueo" id="aiueo" value="" /></p>
<p>メールアドレスを入力してください。: <input type="text" name="email" id="email" value="" /></p>
<p><input type="hidden" name="action" value="send_test_form" /></p>
<p><input type="submit" value=" 登録 " /></p>
</form>
</body>
</html>
最初にインクルードしている validateRule.php は下記に掲載したバリデーション条件を記述したファイルです。
内部で使用している $formRules 変数は、この validateRule.php で定義されています。
validateRule.php:
<?php
$formRules["formTest"] = array(
"aiueo" => array(
"args" => array("validMessage" => "あいうえお"),
"rules" => array(
array(
"method" => "Validate.Presence",
"args" => array("failureMessage" => "空")
),
array(
"method" => "Validate.Format",
"args" => array("pattern" => "/^あいうえお$/i", "failureMessage" => "入力値が違います")
)
)
),
"email" => array(
"args" => array("validMessage" => "正しいEmailアドレス"),
"display" => "Email",
"rules" => array(
array(
"method" => "Validate.Presence",
"args" => array()
),
array(
"method" => "Validate.Email",
"args" => array()
)
)
)
)
?>
これでtestValidation.phpにアクセスすると、入力値とメールアドレスのチェックが行われます。
validateRule.phpで定義されているバリデーションルールは、$formRules["formTest"]内で、
・第1階層にフォーム名
・第2階層に、 valid になる条件と valid 時のメッセージなどの引数
・rules が設定された場合、第3階層にバリデーションメソッドとエラーメッセージや条件など
となります。
バリデーションメソッドに指定できるのは、 livevalidation.js で用意されているバリデーションクラスと同じものです。詳細はそちらを参照ください。
使ってみると、ほとんど何も書いていないにもかかわらず、さっとライブバリデーションが実装できてしまいます。結構いい感じで利用可能となります。
必要となるのは最初のインスタンス生成などの、少数の定型処理の記述だけです。
JavaScript は、window.onload しか書く必要がありません。これも、付属サンプルのように タグを HTML の body 下部に記述すれば、まさに JavaScript を一切記述する必要がありません。
また、 ブラウザ側の JavaScript が OFF にされていたとしても、サーバサイドでのバリデーションが実装されているのでチェックが行われることになります。
単純にサーバサイドのバリデーションライブラリとして見ても、最低限必要な機能はちゃんと実装されているようです。
そして、JavaScript と PHP で同じ条件のバリデーションを2度書かなくてよくなります。
array を書きつづるルールは見づらいですが、構造は単純なので spyc 等と組み合わせて YAML やJSON で記述するようにしてやれば、扱いやすくなりす。




最近のコメント