2016-03-15 48 views
0

我使用下面的模式来验证电子邮件NG模式用于验证电子邮件不工作

var re = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[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,}))$/igm; 

复制从这个小提琴的格局。 (http://jsfiddle.net/jquery4u/5rPmV/)这很好。

我试着用AngularJS实现相同这样

<input type="text" placeholder="Email" ng-model="Employer.Email" ng-pattern="emailPattern" class="form-control" name="email" required /> 
    <p ng-show="showMessages && registerEmployerForm.email.$error.required" class="text-danger"> 
     Email is required. 
    </p> 
    <p ng-show="showMessages && !registerEmployerForm.email.$error.required && registerEmployerForm.email.$error.pattern" class="text-danger"> 
     Email is invalid. 
    </p> 

的JavaScript

$scope.showMessages = true; 
$scope.Employer = { 
    "Email": "" 
}; 
$scope.emailPattern = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[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,}))$/igm; 
$scope.RegisterEmployer = function(myForm) { 
    console.log(myForm) 
}; 

我的小提琴:http://jsfiddle.net/codeandcloud/jusoqs88/

的问题是,如果我尝试[email protected] ,第一小提琴通过,第二小提琴失败。我的问题

  • 为什么对于同一模式AngularJS行为有所不同?
  • 是否有我的代码?

P.S:我知道input type="email"registerEmployerForm.email.$error.email结合是办法做到这一点。不幸的是我不能在这里实现它的正则表达式不应该通过类似[email protected]

+1

可能帮助你http://stackoverflow.com/questions/23671934/form-validation-email-validation -not-working-as-expected-in-angularjs –

+0

@hadiJZ:感谢它适合我现在的需要。想知道是什么让angularjs的行为有所不同 – naveen

回答

0

这里是正则表达式的电子邮件验证:

var re = /^[a-z]+[a-z0-9._][email protected][a-z]+\.[a-z.]{2,5}$/; 

UPDATE

我可以看到这是不是在拨弄工作与2点后@,但在这里它的工作原理:regex test online

UPDATE2

看起来像小提琴有些不对劲,试试这个在你的代码,它会工作:

var re = /^("")("".+?(?<!\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'*\+=\?\^`\{\}\|~\w])*)(‌​?<=[0-9a-z])@))([)([(\d{1,3}\.){3}\d{1,3}])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-‌​z0-9][\-a-z0-9]{0,22}[a-z0-9])$/ 
+0

我最终使用了这个。 http://stackoverflow.com/a/23672445/17447感谢您的答案。 – naveen