2010-05-21 107 views
2

我找到了這個答案,但它有點難以理解,所以我想在這裏分享它。RegularExpressionValidator總是失敗,但ValidationExpression在測試中工作

我有一個驗證密碼的正則表達式。它們應該是7到60個字符,至少有一個數字和一個字母字符。相當標準。我用積極的向前看符號(在(=運營商)來實現它:?

(?=^.{7,60}$)(?=.*[0-9].*)(?=.*[a-zA-Z].*) 

我使用Regex.IsMatch()檢查了我的單元測試這個表達式,它工作得很好。然而,當我使用它在的RegularExpressionValidator,它總是失敗。爲什麼?

回答

4

奇怪的是,我從來沒有遇到過這種情況,但事實證明,RegularExpressionValidator不使用Regex.IsMatch或JavaScript的Regex.test() - 它檢查捕獲匹配,完全等於全面測試的價值。下面是相關的JS代碼:

var rx = new RegExp(val.validationexpression); 
var matches = rx.exec(value); 
return (matches != null && value == matches[0]); 

所以,如果表達的是所有向前看符號(匹配位置,而不是實際的案文),它就會失敗。通過僅部分匹配的表達的例子,這更清楚。與\ d {5},值「123456」將失敗。它不僅僅是在你的表情周圍添加「^ $」,而且是一個IsMatch。你的表情實際上必須被捕獲。

在我的情況下,修復是這樣的表達:

(?=^.{7,60}$)(?=.*[0-9].*).*[a-zA-Z].* 
1

你試過

(?=^.{7,60}$)(?=.*[0-9].*)(?=.*[a-zA-Z].*).+ 
//          ^^ 

?正則表達式應該需要一些東西來消耗。

+0

右鍵這就是問題所在。只是想寫出我發現的答案。謝謝! – Jerph 2010-05-21 21:43:23

相關問題