Идея "единого валидатора" живее всех живых. На самом деле делается ровно наоборот, вот как на пехепе.
foreach($this->_d as $field) {
try {
if($field->name)
$field->validate($post);
}
catch(_CException $e){
/* уловитель ошибок */
}
}
и примерно то же самое на js, но без цикла, потому что поле просто вызывает валидацию самого себя через "единую" функцию, где надо провести некоторые мероприятия общего порядка, вроде стереть предыдущую ошибку и проверить как там с остальными полями - можно ли включать кнопку "Отправить".
validate=function(evt) {
var input=the.inputs[evt.detail.name];
/* тут обнуляется прошлое */
try {
input.validate();
isComplete(); /* быстрый осмотр индикаторов ошибок всех полей */
}
catch(e) {
/* уловитель ошибок */
}
}
the.form.addEventListener('validate',validate);
То есть это метод валидации на лету, когда кнопка Отправить становится активной только когда можно отправлять.
Так вот, а теперь моем внешние половые органы в беде. В такой конфигурации я добавляю поле в таблице базы данных и, если меня не колебет перевод на русский язык его названия и не колебет расположение в форме - мне ничего делать больше не надо: поле появится в форме со всей минимально необходимой инфой и для верстки и для проверки. То есть такой мини phpMyAdmin.
Само собой абсолютно любую форму обслуживают одни и те же скрипты. Хоть 100500 форм нарисуй - все что потребуется, это перевести на русский название поля и определить его метоположение в форме если хочется дизайна, а не хочется - оно и так одно за другим выведется с оригинальными именами.