Вы вообще представляете, какую головную боль вы хотите доставить пользователю подобной формой?
необязательного поля, но, если оно заполнено, то оно должно соответствовать определённому условию,
нескольких необязательных полей, но хотя бы одно из них должно быть заполнено,
нескольких необязательных полей, но, если заполнено одно из них, то должны быть заполнены и остальные?
Как вы хотите объяснить заполняющему форму соответствие того, что вводить нужно, а что не нужно? Даже если вы и сможете это сделать, то все равно большинство людей будет мягко говоря в замешательстве. В формах не нужна такая «гибкость», все должно быть просто и очевидно. Объединяйте поля, модернизируйте форму для максимальной простоты.
Поля будут объединены, упрощены. Пометки, заметки, отметки будут все сделаны. Но проверки правильности заполненности не избежать. Если что-то заполнено не так, то данные могут стать неточными или противоречивыми.
Для этого просто используется проверка введенных данных на php, или к примеру с помощью плагина jQuery Validate. Но опять же стоит проверять данные на валидность(присутствие собаки в email, отсутствие символов в тел. номере), но никак не на соответствие относительно соседних полей в скупе с еще какими либо данными.
Цель валидатора — застраховать вас от получения невалидных данных.
Цель формы — максимально просто для пользователя осуществить передачу данных вам.
Сложная форма? Может разбить ее на несколько шагов и этапов. Шаги можно построить в виде «дерева» для упрощения процесса заполнения если форма уж очень сложная.
Допустим нужно, чтобы пользователь заполнил хотя бы одно поле из трёх. При чём каждое поле имеет свой формат. Например: это телефон, номер счёта или почта. А, вообще, форма состоит из четырёх полей.
Как бы вы сделали такую форму, как бы организовали валидацию данных?
Тут все просто. Основное поле, которое вы не называли обязательно к заполнению. Далее мы пускаем три перечисленных вами поля с комментарием для пользователя, мол «укажите хотя бы один способ с вами связаться».
После заполненя идет простая проверка заполненности первого основного поля. По остальным полям проверяем заполненность(если заполнено, то =1, иначе =0), и получаем на выходе количество заполненных полей. Проверка валидности конкретного поля так же разбирается:
email — наличие собаки и хотя бы одной точки
телефон — только цифры(все зависит от того какой формат вы принимаете от пользователя)
№ счета — только цифры
Всё правильно, но интересен именно подход, а не ручная проверка. Я не знаю можно ли сделать такую валидацию средствами Zend Framework, YII, CodeIgniter, Kohana или ещё в чём-то.
Взгляните на реализацию валидатора в фреймворке Kohana 3 — считаю его хорошим примером. Реализовать проверку при условии заполненности определенных полей можно с помощью колбэков, если я верно понял, о чем речь.