【问题标题】:Angular 2 Reactive Forms Pattern Validator; Ignoring CaseAngular 2 响应式表单模式验证器;忽略大小写
【发布时间】:2017-04-30 03:20:36
【问题描述】:

在 Angular 2.1.0 反应式表单中,我有一个使用 formBuilder 组函数的表单,它尝试使用模式验证器来验证其中一个字段。

this.profileForm = this.formBuilder.group({
'email': [this.profile.email, [
            Validators.pattern('^[a-z0-9A-Z_]+(\.[_a-z0-9A-Z]+)*@[a-z0-9-A-Z]+(\.[a-z0-9-A-Z]+)*(\.[a-zA-Z]{2,15})$')
        ]],
//...

如您所见,我已在组上手动添加大写 A-Z,但我想知道是否有办法指定模式验证器以忽略大小写。我似乎在网上找不到任何示例,而且我可以告诉您不能传入实际的 RegExp 对象,它必须是一个字符串。

【问题讨论】:

标签: regex validation angular


【解决方案1】:

在 Angular 的较新版本中,这些已修复此问题,并且 Validators.pattern 函数现在接受 RegExp 对象。

对于这个版本,我只是创建了一个自定义验证类并添加了我自己的模式函数,它接受一个 RegExp 对象。看起来像这样:

import { AbstractControl, ValidatorFn } from '@angular/forms';
export class CustomValidators {

    public static pattern(reg: RegExp) : ValidatorFn {
        return (control: AbstractControl): { [key: string]: any } => {
            var value = <string>control.value;
            return value.match(reg) ? null : { 'pattern': { value } };
        }
    }
}

引用此验证器的表单如下所示:

    this.profileForm = this.formBuilder.group({
        'firstName': [{ value: this.profile.firstName, disabled: true }],

        //... other fields

        'email': [this.profile.email, [
            CustomValidators.pattern(/^[a-z0-9_]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,15})$/ig)
        ]],

        //...other fields

    });

【讨论】:

  • 告诉你的表单reset()会导致这个错误'ERROR TypeError: Cannot read property 'match' of null'
  • 更改它可以修复它,但我想 angular 4 是否具有模式和正则表达式并不重要。返回值 && value.match(reg) ?空:{'模式':{值}};
猜你喜欢
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
相关资源
最近更新 更多