13

私たちは、フロントエンド コーダーに大量の JavaScript 検証 (技術的には、jQuery ツールの検証) を組み込んだ新しいフォームを作成中です。

私はプロセスの PHP サーバー側部分を作成しています。もちろん、私自身のコードは、受信したデータの独自の検証を行います。

jQuery と PHP の 2 セットの検証ルールを維持する必要があるのではなく、検証ルールの中心的なリストを作成する方法について何か推奨事項はありますか?つまり、フィールド X はサイズ > 1 かつ < 10 でなければなりません。 - PHP と jQuery の両方に渡される単一のファイルまたはデータベース テーブルの検証ルールを変更できますか?

たとえば、前述の「フィールド X はサイズ > 1 かつ < 10 でなければならない」という同じルールを「フィールド X はサイズ > 3 かつ < 5 でなければならない」に変更すると、ファイルまたはデータベース テーブルを編集するだけで済みます。 PHP と jQuery の両方が、それに応じてそのデータを取得して解析しますか?

よろしくお願いいたします。

フィル

4

2 に答える 2

4

これらの線に沿った何かがおそらく良いでしょう:

<?php
$validation = Array(
    "field1" => Array( // "field1" is the name of the input field
        "required" => true, // or false
        "minlength" => 5, // use 0 for no minimum
        "maxlength" => 10, // use 9999 (or other high number) for no maximum
        "regex" => "^[a-zA-Z0-9]+$" // use empty string for no regex
    ),
    "field2" => .......
    ....
);
if( $_POST) {
    foreach($validation as $k=>$v) {
        if( !isset($_POST[$k])) {
            if( $v['required']) die("Field ".$k." is required");
        }
        else {
            $l = strlen($_POST[$k]);
            if( $l < $v['minlength']) die("Field ".$k." too short");
            if( $l > $v['maxlength']) die("Field ".$k." too long");
            if( !preg_match("(".$v['regex'].")",$_POST[$k])) die("Field ".$k." incorrect format");
        }
    }
    // all ok!
}
?>
<script type="text/javascript">
    (function(rules) {
        var die = function(str) {alert(str); return false;};
        document.getElementById('myForm').onsubmit = function() {
            var elms = this.elements, i, it, r, s;
            for( i in rules) {
                r = rules[i];
                it = elms.namedItem(i);
                if( typeof it == "undefined") {
                    if( r.required) return die("Field "+i+" is required");
                }
                else {
                    s = it.length;
                    if( s < r.minlength) return die("Field "+i+" too short");
                    if( s > r.maxlength) return die("Field "+i+" too short");
                    if( !s.match(new RegExp(r.regex))) return die("Field "+i+" incorrect format");
                }
            }
            return true;
        };
    })(<?=json_encode($validation)?>);
</script>

ご覧のように、一般的な考え方は一連のルールを定義することであり、その後で魔法が起こりjson_encode($validation)ます。これにより、ルールが JavaScript 環境に渡されます。PHP と JS で実行するには検証コードを複製する必要がありますが、少なくとも 2 つの場所でコードを変更することなく、ルールを追加できます。お役に立てれば!

于 2012-04-17T00:06:00.860 に答える
3

Nette フレームワークはこれを行います: http://doc.nette.org/en/forms

フォーム全体と検証ルールは、PHP ファイルで定義されています。次に、フレームワークは JavaScript 検証を使用して HTML コードを生成し、送信後にサーバー側の検証を実行します。

フレームワークのフォーム部分を個別に使用することもできます。

于 2012-04-17T00:10:33.177 に答える