【问题标题】:Strange .NET Regex Issue奇怪的 .NET 正则表达式问题
【发布时间】:2009-03-25 21:00:12
【问题描述】:

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

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

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

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

这是 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>

【问题讨论】:

    标签: .net regex validation


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你可能被this bug咬了。 JavaScript RegExp 中应避免使用前瞻断言。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多