Angular conditional email validation
如何根据另一个作用域变量的存在条件有条件地使用angular的电子邮件验证?我仔细阅读了文档,但是找到触发电子邮件验证的唯一方法是使用
理想情况下,我想基于另一个作用域变量的值分配ng-match =" email",或者只是在提交时以编程方式验证电子邮件。从理论上讲,我只能使用一个单独的电子邮件验证正则表达式,但是如果可能的话,我想使用Angular的验证,因为我在其他地方都使用了它。
谢谢
-
编辑:为澄清起见,我特别想在最终使用的任何解决方案中使用angular的本机电子邮件验证。
您应该在电子邮件输入字段上使用
1 | <input type="text" ng-model="email" ng-required="emailRequired" ng-pattern="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> |
示例柱塞