我在 RegularExpressionValidator 的正则表达式上运行客户端时遇到了一些问题:
(?=.{8,})(?=.*[A-Z])(?=.*[\d])(?=.*[\W])|(?=.*[a-z])(?=.*[\d])(?=.*[\W])|(?=.*[A-Z])(?=.*[a-z])(?=.*[\W])|(?=.*[A-Z])(?=.*[a-z])(?=.*[\d])
如果提供的字符串
,则该表达式应该返回true在C#(.NET 3.5)中使用此表达式直接返回不同测试字符串的预期结果,但在客户端浏览器中,有效字符串(例如aaaaBBB1)不起作用。
我已经阅读了thread here,所以解释是客户端使用的JavaScript与.NET实现相比略有不同。
现在我尝试在JavaScript中运行我的正则表达式来验证上面链接的线程中的参数,但在JavaScript中,我的正则表达式也与C#中的相同。
还有另一种方法可以让RegularExpressionValidator工作吗?我不明白为什么JavaScript有效(我预计它不会在阅读有关实现差异之后),但是RegularExpressionValidator没有。
提前感谢任何指向正确方向的指示。
-G。
答案 0 :(得分:1)
尝试以下方法:
^(?:(?=.*[A-Z])(?=.*\d)(?=.*\W)|(?=.*[a-z])(?=.*\d)(?=.*\W)|(?=.*[A-Z])(?=.*[a-z])(?=.*\W)|(?=.*[A-Z])(?=.*[a-z])(?=.*\d)).{8,}$
你的正则表达式允许长度超过8的字符串传递,因为长度断言只是第一次交替的一部分。
然后(这可能是问题)你的正则表达式永远不会匹配任何文本,它只做断言。因此,我在字符限制之外采用了“长度正则表达式”并使其成为实际匹配。
这应该适用于JavaScript和.NET。