【问题标题】:Parameters for Validator Model Driven (Reactive) Forms验证器模型驱动(反应式)表单的参数
【发布时间】:2017-04-18 09:04:14
【问题描述】:

我使用模型驱动创建了一个验证表单。 这是我的验证器,用于检查电子邮件是否格式正确。

static emailValidator(control) {

    if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) {
      return null;
    } else {
      return { 'invalidEmailAddress': true };
    }
  } 

我是这样使用的:

constructor(private formBuilder: FormBuilder) {


    //controlli campi della form

    this.userForm = this.formBuilder.group({

      'email': ['', [Validators.required, ValidationService.emailValidator]]
    });

现在,如何在验证器中传递参数,如字符串?例如,我希望电子邮件不包含字符串“abcd”。

谢谢

【问题讨论】:

  • 让验证器函数返回一个函数,这样就可以传值调用了。
  • 我不明白。拜托,你能给我写个例子吗?谢谢

标签: angular angular2-forms


【解决方案1】:

只需创建一个返回验证器函数的函数。

static emailValidator(match: string) {
  return function (control: AbstractControl) {
    // do validation here
  }
}

用法

'email': ['', [Validators.required, ValidationService.emailValidator(someValue)]]

【讨论】:

  • 谢谢,现在可以了!另一个问题是否可能;如何使用我的验证器的类似输入作为另一个表单构建属性的值?例如:this.form = this.formBuilder.group({ 'surname': ['', Validators.required], 'email': ['', [Validators.required, ValidationService.emailValidator(s)]] }); 如何将姓氏的值放入电子邮件的验证器中?
【解决方案2】:

试试这样:

let EMAIL_REGEXP = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;

 if (EMAIL_REGEXP.test(control.value)) {
             return null;  
        }
 else {
      return { 'invalidEmailAddress': true };
    }

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 2018-07-08
    • 2016-09-11
    • 2017-10-16
    • 1970-01-01
    • 2016-08-08
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多