Angular条件电子邮件验证

时间:2014-01-26 22:16:17

标签: angularjs email-validation

如何根据另一个范围变量的存在有条件地使用angular的电子邮件验证?我查看了文档,但我能找到触发电子邮件验证的唯一方法是使用input type="email",在这种情况下,由于另一个指令依赖type="text",我无法使用。{/ p>

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

由于

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

2 个答案:

答案 0 :(得分:2)

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

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

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

$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 :(得分:0)

你能改变输入的类型吗?如果输入应验证为电子邮件,则将其类型设置为电子邮件,否则将其设置为文本。

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

Example Plunker