13

我们正在编写一个新表单,我们的前端编码器已经包含了大量的 JavaScript 验证(技术上是 jQuery 工具验证)。

我正在编写该过程的 PHP 服务器端部分,当然,我自己的代码将对收到的数据进行自己的验证。

您不必维护两组验证规则——jQuery 和 PHP——你对创建验证规则的中央列表的方法有什么建议吗——即字段 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 中运行,但至少现在您可以添加更多规则,而无需在两个地方更改代码。希望这可以帮助!

于 2012-04-17T00:06:00.860 回答
3

Nette 框架这样做:http : //doc.nette.org/en/forms

整个表单和验证规则在 PHP 文件中定义。然后框架生成带有 javascript 验证的 HTML 代码,并在提交后执行服务器端验证。

您甚至可以单独使用框架的 Forms 部分。

于 2012-04-17T00:10:33.177 回答