2016-03-05 41 views
0

在我的演示MVC應用程序中,我有以下驗證規則來驗證我的域模型類。ASP.Net中的正則表達式驗證MVC

 RuleFor(m => m.Password) 
      .Matches(@"^(?=(\d){2,})(?=([a-z])+)(?=(\.\$\~\&)*)").WithMessage("Password should contain at least 2 digits"); 

但密碼驗證失敗。 基本上我想驗證一個密碼輸入值應該至少包含2個數字,至少有一個特殊字符(。$〜&)和至少一個字母順序。

它們可以以任何順序出現。

基本上我應該匹配字符串喜歡

'a2ss1~A33', 
'678.&aA88' 

但不

'aaa2sfhdjkf^', 
'aass'. 

而且我只是碰到前瞻S IN的正則表達式來了。 我仍然懷疑爲什麼我們不能驗證密碼字段的規則?

.Matches(@"^((\d){2,})(.*[a-zA-Z])([\.\$\~\&]*)").WithMessage("Password should contain at least 2 digits"); 

什麼時候在正則表達式中使用lookahead,何時不使用lookahead?

+0

請張貼密碼代碼不起作用,它應該匹配什麼密碼,哪一個它不應該,只是減少問題的實際問題。沒有必要展示什麼運作良好。 –

+0

做了相應的處理。 – StrugglingCoder

回答

4

您可以使用

^(?=(\D*\d){2})(?=[^A-Za-z]*[A-Za-z])(?=[^.$~&]*[.$~&]).* 

regex demo

正則表達式匹配:

  • ^ - 字符串的開始
  • (?=(\D*\d){2}) - 需要
  • (?=[^A-Za-z]*[A-Za-z])的字符串中的任何2個位數 - 某處需要一個字符串的ASCII字母
  • (?=[^.$~&]*[.$~&]) - 需要[.$~&]集的符號是必需的
  • .* - (可選,如果不需要全字符串匹配,則刪除)匹配除行尾以外的所有字符

Lookaheads啓用來自字符串中相同位置的多個檢查因爲它們都放置在^之後)。正則表達式^((\d){2,})(.*[a-zA-Z])([\.\$\~\&]*)開始時需要2個或更多數字,後面跟除0之外的任何0+字符,後跟1個字母,後跟0+個特殊符號。之後可能還有其他內容,因爲您沒有檢查字符串的結尾。