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