Angularjs 如何在控制器内使用角度输入字段电子邮件验证?

Angularjs 如何在控制器内使用角度输入字段电子邮件验证?,angularjs,angularjs-filter,Angularjs,Angularjs Filter,我正在尝试验证一个变量作为Angular controller中的电子邮件 var valid = $filter('email')($scope.email); 电子邮件筛选器不存在,生成“未知提供程序错误”。从控制器内部访问电子邮件验证的正确方法是什么 谢谢 稍后编辑:不要让我创建自定义筛选器,这必须是使用角度验证的一种方式。您可以使用表单,并通过向提交按钮添加ng disabled来防止表单提交: <form name="form"> <input type

我正在尝试验证一个变量作为Angular controller中的电子邮件

var valid = $filter('email')($scope.email);
电子邮件筛选器不存在,生成“未知提供程序错误”。从控制器内部访问电子邮件验证的正确方法是什么

谢谢


稍后编辑:不要让我创建自定义筛选器,这必须是使用角度验证的一种方式。

您可以使用表单,并通过向提交按钮添加
ng disabled
来防止表单提交:

<form name="form">
      <input type="email" ng-model="email" name="email" required/>
      <button type="submit"
        ng-disabled="form.$invalid">Submit</button>
</form>

{{form.email.$valid}}

提交
{{form.email.$valid}
因为验证的目的是防止提交并显示错误消息。我认为在那里做就足够了,而不是在控制器中处理业务逻辑


您可以编写自己的筛选器:

angular.module(/**some module description here**/).
   filter('email',function(){
       var validateEmail = function(email) { 
            var re = /^(([^<>()[\]\\.,;:\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 re.test(email);
       }
       return function(input){
            return validateEmail(input); 
       };
   });
angular.module(/**此处有一些模块说明**/)。
过滤器('email',函数(){
var validateEmail=函数(电子邮件){
变量re=/^([^()[\]\\,;:\s@\“]+(\.[^()[\]\,;:\s@\“]+)*)(\'+\”)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.[0-9]{1,3}.];
返回重新测试(电子邮件);
}
返回函数(输入){
返回validateEmail(输入);
};
});

正则表达式是从

借用的。您可以创建隐藏的输入类型电子邮件:

<input type="email" hidden id="emailValidator" required ng-model="x" />

此外,此文档可能会有所帮助:

没有回答此问题。如何在controller中访问筛选器验证?@Alexandru Rada:不建议使用筛选器进行表单验证。这就是为什么我建议了另一种方法,为什么你认为我在尝试表单验证?我正在尝试将字符串计算为电子邮件。每个人的答案都与输入字段有关。@Alexandru Rada:如果您想在发送到服务器之前对用户输入进行验证,我认为建议使用这种方法。如果您想对其他情况(如从服务器加载的数据)进行验证,也许我们可以使用我正在寻找的实用程序创建一个实用程序服务。借助内置的角度电子邮件过滤器。现在你说对了。我不是在问表单验证。没有表单。输入字段是解决此问题的一种方法。我和你有完全相同的用例。我只想验证一个字符串,我用我的解决方案来“破解”它,而不是创建一些繁琐的正则表达式。试试看,它很管用。我有一个需要从文本区评估的电子邮件列表。获取你的电子邮件列表,循环浏览它们,然后运行我粘贴在每个电子邮件上的代码。问题出在哪里?既然你能从中找到正确的表达方式,为什么还要借用SO问题?@svarog电子邮件的regexp有很多方法。我从答案中选择了一个。每个人都可以自由地使用自己的或从你已经获得电子邮件正则表达式验证的地方借用(你可能已经在应用程序的另一部分中使用了),为什么要添加另一个并使实现不一致?@svarog是的,现在它是本机功能,当我在写我的答案时,它是2014年:)。我允许您使用以下
编辑我的答案,但是如果您使用的是新的angularjs,那么您可以使用bla-bla-bla…
。或者你可以创造一个新的答案
var validator = $('#emailValidator')[0];
validator.value = "someemail@tovalidate.com";

return validator.checkValidity();