繁体   English   中英

Aspx RegularExpressionValidator在客户端和服务器上的工作方式不同

[英]Aspx RegularExpressionValidator works differently on client and server

我在获取正则表达式以使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)中使用此表达式可直接返回不同测试字符串的预期结果,但是在客户端浏览器中,有效字符串(例如aaaaaBBB1)不起作用。

我已经在这里阅读了该线程 ,所以一个解释是客户端使用JavaScript的方式与.NET实现相比有所不同。

现在,我尝试在JavaScript中运行正则表达式以验证在上面链接的线程中所做的参数,但是在JavaScript中,我的正则表达式也与C#中的相同。

有没有其他方法可以使RegularExpressionValidator工作? 我不明白为什么JavaScript可以工作(我希望在阅读有关实现的差异后就不能使用),但是RegularExpressionValidator却不能。

在此先感谢您指出正确的方向。

G。

请尝试以下操作:

^(?:(?=.*[A-Z])(?=.*\d)(?=.*\W)|(?=.*[a-z])(?=.*\d)(?=.*\W)|(?=.*[A-Z])(?=.*[a-z])(?=.*\W)|(?=.*[A-Z])(?=.*[a-z])(?=.*\d)).{8,}$

由于长度声明只是第一个替换的一部分,因此您的正则表达式将允许长度小于8的字符串通过。

然后(这可能是问题),您的正则表达式永远不会匹配任何文本,而只会断言。 因此,我将“ length regex”作为字符限制之外的内容,并使其实际匹配。

这应该在JavaScript和.NET中均有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM