关于angularjs:Angular条件电子邮件验证

Angular conditional email validation

如何根据另一个作用域变量的存在条件有条件地使用angular的电子邮件验证?我仔细阅读了文档,但是找到触发电子邮件验证的唯一方法是使用input type="email",在这种情况下,由于另一个指令对type="text"的依赖性,我无法使用它。

理想情况下,我想基于另一个作用域变量的值分配ng-match =" email",或者只是在提交时以编程方式验证电子邮件。从理论上讲,我只能使用一个单独的电子邮件验证正则表达式,但是如果可能的话,我想使用Angular的验证,因为我在其他地方都使用了它。

谢谢

-
编辑:为澄清起见,我特别想在最终使用的任何解决方案中使用angular的本机电子邮件验证。


您应该在电子邮件输入字段上使用ng-requiredng-pattern

1
<input type="text" ng-model="email" ng-required="emailRequired" ng-pattern="emailPattern" />

,然后在控制器的$scope上将emailPattern定义为函数。

1
2
3
4
5
6
7
8
$scope.emailPattern = (function() {
var regexp = /^(([^<>()[\\]\\\\.,;:\\s@"]+(\\.[^<>()[\\]\\\\.,;:\\s@"]+)*)|(".+"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;
return {
    test: function(value) {
        if( $scope.emailRequired === false ) return true;
        else return regexp.test(value);
    }
};

})();

以下小提琴实现了您想要的:

http://jsfiddle.net/9SSE4/


您可以更改输入的类型吗?如果输入应被验证为电子邮件,则将其类型设置为电子邮件,否则将其设置为文本。

1
2
3
4
<input type="{{vm.type}}" ng-model="vm.text" />
<select ng-model="vm.type">
  <option>text</option>
  <option>email</option>

示例柱塞