2010-05-21 75 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

相关问题