Jer*_*rph 4 regex asp.net validation
我找到了这个问题的答案,但这有点棘手,所以我想在这里分享。
我有一个验证密码的正则表达式。它们应该是 7 到 60 个字符,至少有一个数字和一个字母字符。很标准。我使用正向前瞻((?=运算符) 来实现它:
(?=^.{7,60}$)(?=.*[0-9].*)(?=.*[a-zA-Z].*)
Run Code Online (Sandbox Code Playgroud)
我使用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]);
Run Code Online (Sandbox Code Playgroud)
因此,如果表达式都是前瞻(匹配位置,而不是实际文本),它将失败。对于仅部分匹配的表达式示例,这更清楚,例如使用\d{5},值“123456”将失败。它不仅仅是在您的表达式周围添加“^$”并执行 IsMatch。你的表情实际上必须捕捉。
在我的情况下的修复是这个表达式:
(?=^.{7,60}$)(?=.*[0-9].*).*[a-zA-Z].*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1421 次 |
| 最近记录: |