Angular,如何为两个字段中的任何一个设置验证应以反应形式方法进行验证

3 validation typescript angular angular4-forms

我正在尝试设置用户表单验证,用户必须输入两个字段之一,移动或电子邮件字段

添加访客反应表单 Html:

<form class="new_guest" id="new_guest" [formGroup]="addGuestForm" (ngSubmit)="onSubmit()">
            <div class="form-group">
                <input placeholder="Enter guest name" class="add-guests form-control ui-autocomplete-input" type="text" formControlName="name"
                    id="guest_name" autocomplete="off">
            </div>
            <div class="form-group">
                <input placeholder="Enter guest email" class="add-guests form-control ui-autocomplete-input" type="text" formControlName="email"
                    id="guest_email" autocomplete="off">
            </div>
            <div class="form-group">
                <input placeholder="Mobile Number, If any" class="add-guests form-control ui-autocomplete-input" type="text" formControlName="mobile"
                    id="guest_mobile" autocomplete="off">
            </div>
            <input type="submit" class="btn btn-default btn-block" id="add_guest" value="ADD GUEST" [disabled]="!addGuestForm.valid">
        </form
Run Code Online (Sandbox Code Playgroud)

添加来宾初始化:

this.addGuestForm = new FormGroup({
  'name': new FormControl(null, Validators.required),
  'email': new FormControl(null, Validators.email),
  'mobile': new FormControl(null)
})
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮忙吗?

She*_*tal 5

您可以使用表单构建器并提供自定义验证,例如:

this.addGuestForm = this.formBuilder.group({
'name': new FormControl(null, Validators.required),
  'email': '',
  'mobile': ''
}, {
      validator: (formControl) => {
        var emailCtrl = formControl.controls.email;
        var mobileCtrl = formControl.controls.mobile;


        if (emailCtrl != undefined && mobileCtrl != undefined)
             if(!(emailCtrl.value.length || mobileCtrl.value.length ))
                    return {invalid: true};
}
});
Run Code Online (Sandbox Code Playgroud)

此外,您还可以检查电子邮件字段的正则表达式定义一个变量 regexPattern 用于电子邮件模式检查并在自定义验证器中使用下面的条件

regexPattern.test(emailCtrl.value)
Run Code Online (Sandbox Code Playgroud)