Angular我可以使用2 ng模式来验证相同的字段

时间:2017-04-26 18:32:21

标签: angularjs ng-pattern

我当前的输入看起来像这样

<input type="email" name="email"
    ng-pattern="emailRegex"
    ng-change="emailChanged()"
    required />

我的ng-pattern =&#34; ctrl.emailRegex&#34;验证电子邮件是否有效

/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,63}$/;

但我想阻止info @,admin @,help @,sales @ emails,所以我把正则表达式改为

/^(?!(?:info|admin|help|sales)@)[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,63}$/

到目前为止一直很好,但我想展示

  

电子邮件无效

到&#34;无效@ !!!!!。com!&#34;

  

info @,admin @,help @,不允许销售@电子邮件

到info@test.com

如何在同一输入中使用2 ng-pattern?

由于

1 个答案:

答案 0 :(得分:1)

您只能为输入验证一种模式。并且,即使您可以通过使用指令以某种方式进行操作,它也将是一个太脏的解决方案。 相反,我建议在ng-change函数内验证正则表达式的输入,并使用formName.inputName.$setValidity设置输入的自定义有效性。如果传递一个模式,这可以让您回退。

因此,例如,ctrl.emailChanged可能有这样的东西,

ctrl.emailChanged = function() {
  var emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,63}$/;
  var customValidateEmail = /^(?!(?:info|admin|help|sales)@)[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,63}$/;

  if(!emailPattern.test(ctrl.registrationForm.email)) {
    // Invalid email
  } else if (customValidateEmail.test(ctrl.registrationForm.email)) {
    // handle accordingly
  }

  // rest of the things
  ...

}

或者,您可以将验证逻辑移动到另一个函数,只需从emailChanged调用它。