これらの線に沿って何かがおそらく良いでしょう:
<?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つの場所でコードを変更することなく、より多くのルールを追加することができます。お役に立てれば! http://doc.nette.org/en/forms
全体の形や検証ルールはPHPファイルで定義されています。
あなたはどのようなサイトを作成しましたかjQueryがデータベースからデータを読み取ることができないので、ファイルやデータベースを使用して実際にルールを共有できないような高度な検証が必要だと思うのはなぜですか?なぜあなたはそれをやるべきではないのか分かりません。もう1つは、xmlを使用して検証ルールを格納することです。 –
これはNodeJSが本当に輝く別のエリアです。 – AlienWebguy
ルールを含むデータベースで簡単な検証ルール(電子メール、最大長、必須など)を抽象化することは非常に簡単ですが、別のフィールドの内容、現在のユーザー、またはシステム内の他のオブジェクトは、かなり複雑です。膨大な量の検証ロジックがない限り、PHPとjQueryの両方で手動でロジックをコーディングするだけです。 –