如何根据另一个范围变量的存在有条件地使用angular的电子邮件验证?我查看了文档,但我能找到触发电子邮件验证的唯一方法是使用input type="email"
,在这种情况下,由于另一个指令依赖type="text"
,我无法使用。{/ p>
理想情况下,我想根据另一个范围变量的值分配ng-match =“email”,或者只是在提交时以编程方式验证电子邮件。从理论上讲,我可以使用单独的电子邮件验证正则表达式,但如果可能的话,我想使用Angular的验证,因为我在其他地方使用它。
由于
- 编辑:为了澄清,我特别想在我最终使用的任何解决方案中使用angular的本机电子邮件验证。
答案 0 :(得分:2)
您应该在电子邮件输入字段中使用ng-required
和ng-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);
}
};
})();
以下小提琴实现了你想要的东西:
答案 1 :(得分:0)
你能改变输入的类型吗?如果输入应验证为电子邮件,则将其类型设置为电子邮件,否则将其设置为文本。
<input type="{{vm.type}}" ng-model="vm.text" />
<select ng-model="vm.type">
<option>text</option>
<option>email</option>