Angular 6 Входной валидатор для 4 символов, которые можно комбинировать?

У меня есть ввод для 4 символов A, B, M, N. пользователь может ввести любое из этих значений (минимум 1 и максимум 4, без повторов). Мне нужен валидатор на случай, если пользователь введет другое значение, например: P или Z.

Пользователь может комбинировать эти символы, например. A , BM, NA, ABMN, но не AP (P недействителен), любые предложения приветствуются. (Я использую поле ввода углового материала)

Попытка (это работает только тогда, когда я ввожу первое значение, например, «a», но когда я ввожу второй символ, он больше не работает, например, «ab»:

 <mat-form-field >
        <input matInput placeholder="Cara/s" [(ngModel)]="caras_selec" name="caras" #caras="ngModel" [pattern]="[abmn]"
        minlength="1" maxlength="4">
      </mat-form-field>

person matQ    schedule 07.01.2020    source источник
comment
Можете ли вы опубликовать свою попытку написать свой валидатор?   -  person Roddy of the Frozen Peas    schedule 07.01.2020
comment
@RoddyoftheFrozenPeas хорошо   -  person matQ    schedule 07.01.2020
comment
Ответ ниже работал для вас?   -  person Alvin Saldanha    schedule 05.01.2021


Ответы (1)


Вы можете использовать отрицательное предварительное утверждение.

Это позволяет использовать любой символ a,b,n или m без повторения. Это неявно заботится и о максимальных 4 символах. Нет необходимости явно указывать ограничение на {1,4} символов.

^(?!.*(.).*\1)[abnm]+$

Текущая демонстрация

person Alvin Saldanha    schedule 07.01.2020