Рекомендации по совместному использованию правил проверки между Javascript и PHP?
Мы находимся в процессе написания новой формы, в которую наш интерфейсный кодер включил множество и множество проверок JavaScript (технически, проверка инструментов jQuery).
Я пишу серверную часть процесса на PHP, и, конечно, мой собственный код будет выполнять собственную проверку полученных данных.
Вместо того, чтобы поддерживать два набора правил проверки - jQuery и PHP - есть ли у вас какие-либо рекомендации о способе создания центрального списка проверки правила - т. Е. Поле X должно быть размером > 1 и <10 и т. Д. - Чтобы я мог изменить правило проверки в одном файле или таблице базы данных, которое затем будет передано как в PHP, так и в jQuery?
Например, измените то же правило, о котором я упоминал выше "поле X должно быть размером >1 и <10" на "поле X должно быть размером > 3 и <5", и все, что мне нужно будет сделать, это отредактировать файл или таблицу базы данных, и PHP и jQuery будут извлекать и анализировать эти данные соответственно?
Заранее благодарим вас за ваше помогите,
Фил
2 answers
Что-то в этом роде, вероятно, было бы хорошо:
<?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, но, по крайней мере, теперь вы можете добавить больше правил, не меняя код в двух местах. Надеюсь, это поможет!
Фреймворк Nette делает это: http://doc.nette.org/en/forms
Вся форма и правила проверки определены в файле PHP. Затем платформа генерирует HTML-код с проверкой javascript и после отправки выполняет проверку на стороне сервера.
Вы даже можете использовать часть форм фреймворка отдельно.