如何在Angular 6中使用Pattern验证印度手机号码

Zhu*_*Zhu 2 pattern-matching typescript angular6

正如我在标题中提到的那样,我正在尝试验证用户输入的手机号码是否是印度号码。

为此,我从印度手机号码的正则表达式中引用了一种模式

但就我而言,它总是返回false。

我想验证以下内容。

  • 数字应以6,7,8,9开头
  • 必须有10位数字

app.component.html

<form class="example-form" [formGroup]="userAddressValidations">
    <mat-form-field appearance="outline" class="col-sm-6">
        <mat-label>10-digit Mobile Number</mat-label>
        <input matInput formControlName="mobileNumber" maxlength="10" (keypress)=_keyPress($event)>
        <mat-error *ngIf="userAddressValidations.get('mobileNumber').hasError('required')">
            Please fill out this field.
        </mat-error>
        <mat-error *ngIf="userAddressValidations.get('mobileNumber').hasError('pattern')">
            It is not a valid mobile number.
        </mat-error>
    </mat-form-field>

</form>
Run Code Online (Sandbox Code Playgroud)

app.component.ts

export class InputErrorStateMatcherExample {
  userAddressValidations: FormGroup;
  constructor(private formBuilder: FormBuilder) { }
  ngOnInit() {
    this.userAddressValidations = this.formBuilder.group({
      mobileNumber: ['', [Validators.required, Validators.pattern('^[6-9]\d{9}$')]]
    });

  }
  _keyPress(event: any) {
    const pattern = /[0-9]/;
    let inputChar = String.fromCharCode(event.charCode);
    if (!pattern.test(inputChar)) {
        event.preventDefault();

    }
}
}
Run Code Online (Sandbox Code Playgroud)

Stackblitz:https ://stackblitz.com/edit/angular-mat-form-validation-eg-4jag5u ? file = app%2Finput-error-state-matcher-example.ts

谁能帮我修复它。

Wik*_*żew 5

您可以使用

Validators.pattern('[6-9]\\d{9}')
Run Code Online (Sandbox Code Playgroud)

^$图案时,设定用于字符串的帮助下被自动添加。或者,您可以使用正则表达式文字表示法(然后,^并且$是必需的):

Validators.pattern(/^[6-9]\d{9}$/)
Run Code Online (Sandbox Code Playgroud)

请注意,^并且$在此具体代码段中不起作用,因为您通过maxlength="10"属性限制了输入字符的数量。

请参阅生成的regex演示更新的Stackblitz演示