奇怪的.NET正则表达式问题

时间:2009-03-25 21:00:12

标签: .net regex validation

鉴于以下RegEx表达式,在regexlib.com上使用字符串“2rocks”进行测试会产生“匹配”。但是,在我的.NET应用程序中,它导致正则表达式验证程序抛出验证错误。

^(?=.*[A-Za-z])[a-zA-Z0-9@\-_\+\.]{6,32}$

如果我在我的应用程序和regexlib.com中将字符串更改为“rocks2”,我会在两个地方都匹配。

目标是有一个正则表达式,它要求字符串的长度在6-32个字符之间,并允许AZ,az,数字和正则表达式中包含的其他特殊字符,强制至少一个字母。< / p>

这是ASP标记,我完全糊涂了。

<asp:regularexpressionvalidator 
    id=vldRegEx_LoginID 
    runat="server" 
    ErrorMessage="Regex Error Message" 
    Display="Dynamic" 
    ControlToValidate="txtLoginID" 
    ValidationExpression="^(?=.*[A-Za-z])[a-zA-Z0-9@\-_\+\.]{6,32}$">
        <img src="images/error.gif" border="0">
 </asp:regularexpressionvalidator>

2 个答案:

答案 0 :(得分:6)

您传递的ValidationExpression实际上是用作客户端javascript正则表达式的表达式。 Javascript正则表达式不支持.NET正则表达式的所有功能,这就是您遇到问题的原因。您有两种选择:

  • 关闭客户端验证并仅使用服务器端验证(在验证程序上设置EnableClientScript = false)
  • 将正则表达式重写为有效的javascript正则表达式(javascript regex tester:http://regexpal.com/

答案 1 :(得分:0)

你可能被this bug咬伤了。在JavaScript RegExp中应该避免使用Lookahead断言。