Проверка валидности

Этот вид зависимостей (ZForms.Dependence.TYPE_VALID) проверяет правильность заполненность виджета.

Параметры

oValid : {
	String sType           : null,
	RegExp rPattern        : null,
	Object oCompare        : null,
	Function fFunction     : null,
	String sName           : null,
	String sId             : null,
	Boolean bInverse       : false,
	String sClassName      : null,
	Boolean bCheckForEmpty : false,
	String sLogic          : 'and', 
	Array aFrom            : []
	}

Первые четыре параметра определяют, каким образом будет проводится валидация данных (параметры являются взаимоисключающими в порядке следования, т.е. если передан sType, все остальные не учитываются и т.д.):

  • sType — встроенный тип валидации. См. «Пример 1».
  • rPattern — регулярное выражение валидации. См. «Пример 2».
  • oCompare — объект сравнения. С помощью объекта сравнения можно сравнивать значение виджета со значением другого виджета или с простым значением. См. «Пример 3», «Пример 4», «Пример 5».
  • fFunction — пользовательская функция валидации. См. «Пример 6».

Вторая группа параметров является дополнительной:

  • sName — имя виджета, значение которого будет проверяться. Если параметр не передан, будет взят текущий виджет (которому добавляется эта зависимость).
  • sId — альтернатива параметру sName, вместо имени можно указать id виджета. Применяется только в том случае, когда несколько виджетов имеют одинаковое имя, а зависимость нужно указать от конкретного виджета.
  • bInverse — инвертирование (иногда проще написать то, чему не должно удовлетворять условие валидации).
  • sClassName — CSS-класс, который назначается в случае невалидных данных для данного условия (позволяет делать различные сообщения об ошибках, если валидации зависит от нескольких критериев). Неприменимо для валидации по пользовательской функции (но функция внутри себя может добавить необходимый класс).
  • bCheckForEmpty — применять условие валидации, если поле виджета пустое. Неприменимо для валидации по пользовательской функции (функция должна сама проверять все значения).
  • sLogic — логика связывания зависимостей (играет роль только когда заполнен параметр aFrom).
  • aFrom — массив вида [{ sName : 'имя_виджета_1', sType : null, … }, …, { sName : 'имя_виджета_N', sType : null, … }]. Параметр необходим, когда проверка заполненности виджета зависит не только от самого себя, но и (или) от других виджетов. Каждый из элементов этого массива может включать все предыдущие параметры.

Встроенные типы валидации

На данный момент поддерживается только один тип — email.

Пример 1

Код примера 1

<form class="zf" action=".">
	<dl>
		<dt><label for="input-email">Эл. адрес</label></dt>
		<dd><input class="zf" type="text" name="email" id="input-email" onclick="return { oValid : { sType : 'email' } }" /></dd>
	</dl>
</form>

Проверка с помощью регулярного выражения

Значение виджета проверяется с помощью заданного регулярного выражения. Вместо регулярного выражения может быть указана строка (в этом случае проверяется полное совпадение).

Пример 2. Поле допускает ввод только символов английского алфавита, цифер и знака «_». Причем первый символ не должен быть цифрой.

Код примера 2

<form class="zf" action=".">
	<dl>
		<dt><label for="input-login">Логин</label></dt>
		<dd><input class="zf" type="text" name="login" id="input-login" onclick="return { oValid : { rPattern : /^[a-zA-Z_][a-zA-Z0-9_]*$/ }, oRequired : {} }" /></dd>
	</dl>
</form>

Проверка с помощью сравнения

Позволяет сравнивает значение виджетов между собой или значение виджета с простым значением. Объект сравнения:

oCompare : {
	String sCondition : 'eq',
	String sName      : null,
	String mValue     : null
	}

Где:

  • sCondition — условие сравнения, допустимые варианты: eq (=), gt (>), gte (>=), lt (<), lte (<=).
  • sName — если указан этот параметр, то значение будет сравнивать со значением виджета с этим именем.
  • mValue — если указан этот параметр, то значение будет сравниваться непосредственно с ним.

Пример 3. Значение полей «Пароль» и «Пароль еще раз» должны совпадать.

 должно совпадать с полем «Пароль»

Код примера 3

<form class="zf" action=".">
	<dl>
		<dt><label for="input-password">Пароль</label></dt>
		<dd><input class="zf" type="password" name="password" id="input-password" onclick="return { oRequired : { iMin : 5 } }" /></dd>
	</dl>
	<dl>
		<dt><label for="input-password-confirm">Пароль еще раз</label></dt>
		<dd><input class="zf" type="password" name="password-confirm" id="input-password-confirm" onclick="return { oRequired : { iMin : 5 }, oValid : { oCompare : { sName : 'password' } } }" /></dd>
		<dd class="zf-hint zf-hint-invalid"><i class="zf-arrow"></i>должно совпадать с&#160;полем «Пароль»</dd>
	</dl>
</form>

Пример 4. Дата в поле «Дата окончания» должна быть больше чем дата в поле «Дата поступления».

Код примера 4

<form class="zf" action=".">
	<dl class="zf-date-box">
		<dt><label for="input-datefrom">Дата поступления</label></dt>
		<dd><input class="zf zf-date" type="text" name="date-from" id="input-date-from" onclick="return { oRequired : {} }" /></dd>
	</dl>
	<dl class="zf-date-box">
		<dt><label for="input-date-to">Дата окончания</label></dt>
		<dd><input class="zf zf-date" type="text" name="date-to" id="input-date-to" onclick="return { oValid : { oCompare : { sCondition : 'gt', sName : 'date-from' } }, oRequired : {} }" /></dd>
	</dl>
</form>

Пример 5. Сумма кредита должна находится в пределах от 1000 до 50000.

 от 1000 до 50000

Код примера 5

<form class="zf" action=".">
	<dl>
		<dt><label for="input-sum">Cумма кредита</label></dt>
		<dd><input class="zf zf-number" type="text" name="sum" id="input-sum" size="5" onclick="return { oValid : { aFrom : [{ oCompare : { sCondition : 'gte', mValue : 1000 } }, { oCompare : { sCondition : 'lte', mValue : 50000 } }] } }" /></dd>
		<dd class="zf-hint"><i class="zf-arrow"></i>от&#160;1000&#160;до&#160;50000</dd>
	</dl>
</form>

Проверка с помощью пользовательской функции

Позволяет создать сложное условие валидации с помощью функции. Функция получает два параметра и должна возвратить true или false, в зависимости от результата проверки:

function checkSomething(
	ZForms.Widget oWidget,
	ZForms.Dependence oDependence
	) {

	// проверка

	return true; /* или false */

}

Где:

  • oWidget — ссылка на объект виджета, который проверяется.
  • oDependence — ссылка на объект зависимости.

Пример 6. Перепишем «Пример 5» с помощью пользовательской функции.

 от 1000 до 50000

Код примера 6

<form class="zf" action=".">
	<dl>
		<dt><label for="input-sum2">Cумма кредита</label></dt>
		<dd><input class="zf zf-number" type="text" name="sum" id="input-sum2" size="5" onclick="return { oValid : { fFunction : function(oWidget) { return oWidget.getValue().isEmpty() || (oWidget.getValue().isGreaterOrEqual(1000) &amp;&amp; oWidget.getValue().isLessOrEqual(50000)); } } }" /></dd>
		<dd class="zf-hint"><i class="zf-arrow"></i>от&#160;1000&#160;до&#160;50000</dd>
	</dl>
</form>