gpt4 book ai didi

asp.net - RegularExpressionValidator 总是失败,但 ValidationExpression 在测试中有效

转载 作者:行者123 更新时间:2023-12-02 10:26:29 24 4
gpt4 key购买 nike

我找到了这个问题的答案,但这有点棘手,所以我想在这里分享。

我有一个验证密码的正则表达式。它们应为 7 到 60 个字符,其中至少有 1 个数字和 1 个字母字符。相当标准。我使用正向前瞻((?= 运算符)来实现它:

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

我使用Regex.IsMatch()在单元测试中检查了这个表达式,它工作得很好。但是,当我在正则表达式验证器中使用它时,它总是失败。为什么?

最佳答案

奇怪的是,我以前从未遇到过这种情况,但事实证明 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].*

关于asp.net - RegularExpressionValidator 总是失败,但 ValidationExpression 在测试中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2885748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com