我们正在编写一个新表单,我们的前端编码器已经包含了大量的JavaScript验证(技术上,jQuery工具验证)。
我正在编写流程的PHP服务器端部分,当然,我自己的代码将对收到的数据进行自己的验证。
您不必维护两组验证规则 - jQuery和PHP - 您是否有关于创建验证规则中心列表的方法的任何建议 - 即字段X必须是大小> 1和< 10,等等 - 所以我可以在单个文件或数据库表中更改验证规则,然后将其传递给PHP和jQuery?
例如,更改我在上面提到的相同规则“字段X必须是大小> 1而且< 10”到“字段X必须是大小> 3且< 5”而我所要做的就是编辑文件或数据库表,PHP和jQuery都会相应地检索和解析这些数据吗?
先谢谢你的帮助,
菲尔
答案 0 :(得分: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中运行,但至少现在您可以添加更多规则而无需在两个位置更改代码。希望这有帮助!
答案 1 :(得分:3)
Nette framework执行此操作:http://doc.nette.org/en/forms
整个表单和验证规则在PHP文件中定义。然后,框架使用javascript验证生成HTML代码,并在提交后执行服务器端验证。
您甚至可以单独使用框架的Forms部分。