CakePHP - проверка может быть пустой, но если она не пуста, она должна содержать не менее 4 символов и цифр - PullRequest
12 голосов
/ 06 мая 2011

Как я могу создать правило проверки, которое позволяет полю быть пустым, но если это не так, оно должно быть числовым и иметь длину 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'
        )
    )

Это прекрасно работает, но когда поле пусто, оно все равно запускает проверку.

Спасибо
Тройник

Ответы [ 5 ]

27 голосов
/ 06 мая 2011

Следующий фрагмент должен помочь:

'numeric' => array(
    'rule' => 'numeric',
    'allowEmpty' => true,
    'message' => 'Numbers only'
),

См. Также главу о проверке данных в кулинарной книге.

1 голос
/ 06 мая 2011

вы также забыли последний => истинный параметр - см. http://www.dereuromark.de/2010/07/19/extended-core-validation-rules/ для деталей

0 голосов
/ 23 июля 2014

Есть способ сделать это просто

    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,})?$\/"
            )
        )
    );
0 голосов
/ 17 мая 2013
'numeric' => array(
    'rule' => 'numeric',
    'message' => 'Numbers only'
),
'maxLength' => array(
    'rule' => array('maxLength', 10),
    'message' => '10 digit no'
)
0 голосов
/ 01 февраля 2013

Атрибут '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'  
),...   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...