.aspx的工作的RegularExpressionValidator不同的客户端和服务器

问题描述:

我有一些问题得到一个正则表达式为的RegularExpressionValidator到客户端上运行:.aspx的工作的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

对于特殊的“\ X”字符类(如“\ d”和“\ W”),不需要将它们写为“[\ d]”;这与“\ d”本身完全相同。 – Pointy 2011-04-18 14:16:20

+0

@Pointy - 谢谢,不知道, – Gorgsenegger 2011-04-19 06:34:03

尝试以下方法:

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

你的正则表达式将允许8下长度的字符串来传递,因为长度断言只是第一交替的一部分。

然后(这可能是问题)你的正则表达式从来没有匹配任何文本,它只是断言。因此,我将字符限制外的“长度正则表达式”作为实际匹配。

这应该适用于JavaScript和.NET。

+0

谢谢,那个工作! – Gorgsenegger 2011-04-19 08:59:42