RegularExpressionValidator总是失败,但ValidationExpression在测试中工作
问题描述:
我找到了这个答案,但它有点难以理解,所以我想在这里分享它。RegularExpressionValidator总是失败,但ValidationExpression在测试中工作
我有一个验证密码的正则表达式。它们应该是7到60个字符,至少有一个数字和一个字母字符。相当标准。我用积极的向前看符号(在(=运营商)来实现它:?
(?=^.{7,60}$)(?=.*[0-9].*)(?=.*[a-zA-Z].*)
我使用Regex.IsMatch()检查了我的单元测试这个表达式,它工作得很好。然而,当我使用它在的RegularExpressionValidator,它总是失败。为什么?
答
奇怪的是,我从来没有遇到过这种情况,但事实证明,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].*
答
你试过
(?=^.{7,60}$)(?=.*[0-9].*)(?=.*[a-zA-Z].*).+
// ^^
?正则表达式应该需要一些东西来消耗。
右键这就是问题所在。只是想写出我发现的答案。谢谢! – Jerph 2010-05-21 21:43:23