Неверная ошибка регулярного выражения в угловой директиве - PullRequest
0 голосов
/ 02 июля 2018

Состояние:

Содержимое может содержать только символы из следующего набора:

a b c d e f g h i j k lm n o p q r s t uv w x y z АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ 0 1 2 3 4 5 6 7 8 9 / -? : (). , '+

• Содержание НЕ может начинаться с ‘/’ • Содержимое не может содержать ‘//’

export function directDebitValidator(nameRe: RegExp): ValidatorFn {
        return (control: AbstractControl): { [key: string]: any } | null => {
            const directDebitID = nameRe.test(control.value);
            return directDebitID ? { 'directDebit': { value: control.value } } : null;
        };
    }

    @Directive({
        selector: '[directDebit]',
        providers: [{ provide: NG_VALIDATORS, useExisting: DirectDebitValidatorDirective, multi: true }]
    })
    export class DirectDebitValidatorDirective  {
        validate(control: AbstractControl): { [key: string]: any } | null {

            return control.value ? directDebitValidator(new RegExp("^(? !.* [\/]{2})[a-zA-Z0-9-?:().,'+]+([a-zA-Z0-9\/-?:().,'+])*$"))(control)
                : null;
        }
    }

1 Ответ

0 голосов
/ 02 июля 2018

Есть несколько проблем:

  • В предварительном определении не может быть пробелов
  • [/-?] создает диапазон, - должен быть экранирован или помещен в начало / конец класса символов.
  • Вы можете использовать / неэкранированный в нотации конструктора, так как там не используются разделители.

Итак, вы можете использовать

directDebitValidator(new RegExp("^(?!.*/{2})[a-zA-Z0-9?:().,'+-][a-zA-Z0-9/?:().,'+-]*$"))

Или, используя буквенное обозначение регулярного выражения:

directDebitValidator(/^(?!.*\/{2})[a-zA-Z0-9?:().,'+-][a-zA-Z0-9\/?:().,'+-]*$/)

См. Демоверсию regex .

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