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

Joh*_*orf 0 .net regex validation

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

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

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

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

这是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>
Run Code Online (Sandbox Code Playgroud)

Chr*_*nes 6

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

  • 关闭客户端验证并仅使用服务器端验证(在验证器上设置EnableClientScript = false)
  • 重写正则表达式是一个有效的JavaScript正则表达式(javascript正则表达式测试器:http://regexpal.com/)