Laravel Validation для целых чисел или конкретного слова

Я создаю правило проверки, где location атрибут может иметь любой integer или слово "all" значение.
Для целочисленной проверки я использую это правило:

'location' => 'обязательно | целое число'

и для конкретного слова я могу использовать это правило:

'location' =>   ['required',
                    Rule::in([all]),
                ]

Как можно применять оба правила вместе, чтобы location может быть любым целым числом или словом "all"? Может ли регулярное выражение помочь здесь?

2 ответа

Решение
$this->validate($request, [
    'location' => [
        'required',
        'max:255',
        function ($attribute, $value, $fail) {
            if( is_int( $value ) || 'all' === $value ) {
                return true;
            } else {
                $fail($attribute.' is invalid.');
            }
        },
    ],
]);

Но имейте в виду: если вы отправляете integer через форму - вы получите string, И проверка is_int( $value ) не будет передано.

Вы могли бы использовать regex править без required (если вы не возражаете против отдельного сообщения об ошибке для пустых полей):

'location' => ['regex:/^(?:\d+|all)$/']

Это означает, что входное значение должно быть \d или же all,

Другие вопросы по тегам