FormControl.Validators.pattern работает некорректно, а регулярное выражение с той же строкой показывает, что данные совпадают [дубликаты]

Я пытаюсь создать шаблон для телефонных номеров, и я хочу выглядеть так:

  1. +375 29 555 55 55
  2. 80-33-555-555-55
  3. +375-25-555-55-55
  4. 80445555555 и др.

Я написал следующий код:

.ts

  phoneFormControl = new FormControl('', [Validators.required, Validators.pattern('^\s*(\+375|80)\s?-?\s?(25|29|33|44)\s?-?\s?\d{3}\s?-?\s?\d{2}\s?-?\s?\d{2}$')]);

.html

<mat-form-field class="example-full-width">
      <mat-label>Телефон</mat-label>
      <input matInput [(ngModel)]="this.profileData.Phone" [formControl]="phoneFormControl" maxlength="30">
      <mat-error *ngIf="phoneFormControl.hasError('pattern')">Номер не соответствует формату!</mat-error>
    </mat-form-field>

Но у меня ошибка: введите здесь описание изображения

А также пытался изменить .ts на этот phoneFormControl = new FormControl('', [Validators.required, Validators.pattern('^\s*80\s?-?\s?(25|29|33|44)\s?-?\s?\d{3}\s?-?\s?\d{2}\s?-?\s?\d{2}$')]);, ожидая, что он будет работать только с 80... Ошибка исчезла, но теперь он работает некорректно (я использовал 80295555555 80-29-555-55-55 80 33 555 55 55 )...

Также я пробовал это:

 phoneFormControl = new FormControl('', [Validators.required, Validators.pattern('/^\s*([+]{1}375|80)\s?-?\s?(25|29|33|44)\s?-?\s?\d{3}\s?-?\s?\d{2}\s?-?\s?\d{2}$/')]);

Что я могу сделать, чтобы получить ожидаемый результат?


person bot_73    schedule 28.02.2021    source источник


Ответы (1)


Я не уверен на 100%, но похоже, что у вас опечатка.

Если вы посмотрите пример в официальной документации, вы увидите, что вам не нужно ^ и $ в начале и в конце строки регулярного выражения.

Так что, вероятно, вам просто нужно изменить свой код на это:

phoneFormControl = new FormControl('', [Validators.required, Validators.pattern('\s*(\+375|80)\s?-?\s?(25|29|33|44)\s?-?\s?\d{3}\s?-?\s?\d{2}\s?-?\s?\d{2}')]);
person Ricardo Rocha    schedule 28.02.2021
comment
Не проблема иметь ^ и $ в этом шаблоне (хотя они избыточны в этом контексте). Во всяком случае, ваше текущее решение — '\s*(\+375|80)\s?-?\s?(25|29|33|44)\s?-?\s?\d{3}\s?-?\s?\d{2}\s?-?\s?\d{2}' — выдает такое же исключение. - person Wiktor Stribiżew; 28.02.2021