Пользовательский шаблон проверки в Laravel - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть одна пользовательская функция проверки в провайдере. Если пользователь ввел не эти [A, B, C и /], верните ошибку. В настоящее время эта функция работает нормально. Заранее я хочу проверить следующие шаблоны (хочу разрешить только эти шаблоны) и не эти шаблоны, хочу вернуть ошибку.

A
C
B
A/B
A/C
A/C/B
A/B/C
C/A
C/B
C/A/B
C/B/A
B/A
B/C
B/A/C
B/C/A
Validator::extend('capital_letter_abc_with_slash', function ($attribute, $value, $parameter, $validator) {
    return preg_match('/[ABC\/]/', $value) === 1;
});

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Если у вас есть набор допустимых значений, на мой взгляд, самый простой способ - поместить его в массив и просмотреть его в правиле валидации:

Validator::extend('abc', function ($attribute, $value, $parameter, $validator) {
    $allowedPatterns = [
        'A',
        'C',
        'B',
        'A/B',
        'A/B',
        'A/C/B',
        'A/B/C',
        'C/A',
        'C/B',
        'C/A/B',
        'C/B/A',
        'B/A',
        'B/C',
        'B/A/C',
        'B/C/A',
    ];

    foreach ($allowedPatterns as $pattern) {
        if ($value === $pattern) {
            return true;
        }
    }

    return false;
});

Вы можете сохранить этот массив в конфигурации, в модели,где вам нужно.

0 голосов
/ 01 ноября 2019

Ваше регулярное выражение должно быть таким:

preg_match('/^(?!.*(.)\/.*\1)[ABC](\/[ABC]){0,2}$/', $value);

Эти буквы не повторяются .

Для https://laravel.com/docs/5.8/validation#rule-regex

Вы можете сделатьпримерно так:

Validator::make($parameter, [
    'abc' => 'regex:/^(?!.*(.)\/.*\1)[ABC](\/[ABC]){0,2}$/'
]);

Вы можете проверить свое регулярное выражение здесь: https://tsaikoga.github.io/it-tools/web/index.html#/regex-page

Regex result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...