Ответ 1
Следующий фрагмент должен сделать трюк:
'numeric' => array(
'rule' => 'numeric',
'allowEmpty' => true,
'message' => 'Numbers only'
),
См. также главу проверка данных в кулинарной книге.
Как создать правило проверки, которое позволяет пустому поле, но если это не так, оно должно быть числовым и длиной 4 символа?
Это то, что у меня есть сейчас
'year' => array(
'numeric' => array(
'rule' => 'numeric',
'message' => 'Numbers only'
),
'maxLength' => array(
'rule' => array('maxLength', 4),
'message' => 'Year in YYYY format'
),
'minLength' => array(
'rule' => array('minLength', 4),
'message' => 'Year in YYYY format'
)
)
Это отлично работает, но когда поле пусто, оно все равно выполняет проверку.
Спасибо,
Тройник
Следующий фрагмент должен сделать трюк:
'numeric' => array(
'rule' => 'numeric',
'allowEmpty' => true,
'message' => 'Numbers only'
),
См. также главу проверка данных в кулинарной книге.
вы также забыли last = > true paramater - подробнее см. http://www.dereuromark.de/2010/07/19/extended-core-validation-rules/
Атрибут 'last' должен идти = > в false. Поэтому окончательное решение должно выглядеть так:
'year' => array(
'numeric' => array(
'rule' => 'numeric',
'allowEmpty' => true,
'message' => 'Numbers only'
'last' => false ), ...
Мне лично нравится отделять вещи (более читабельность и проще в отладке):
'year' => array(
'allowEmpty' => array(
'allowEmpty'=>true,
'last'=>false ), 'numeric'=> array(
'rule' =>'numeric',
'message' => 'Numbers only'
),... )
'numeric' => array(
'rule' => 'numeric',
'message' => 'Numbers only'
),
'maxLength' => array(
'rule' => array('maxLength', 10),
'message' => '10 digit no'
)
Есть способ сделать это просто
array(
'myfield' => array(
"rule_empty" => array(
'rule' => '#.*#i', // validate everything
'allowEmpty' => true,
'last' => false
),
"rule_price" => array(
'message' => 'Is not a valid price ! ',
'rule' => "\/^[0-9]+(?:(\\.|,)[0-9]{1,})?$\/"
)
)
);