【问题标题】:Regular expression validator is not allowing non-english characters for \w正则表达式验证器不允许 \w 使用非英文字符
【发布时间】:2011-04-16 17:02:24
【问题描述】:

我的页面中有电子邮件字段,我正在使用我的 asp.net 提供的正则表达式验证器对其进行验证。我使用与电子邮件验证器相同的验证表达式,即

ValidationExpression="\w+([-+.']\w+)@\w+([-.]\w+).\w+([-.]\w+)*"

它工作正常,但是当我尝试给出非英文字母时出现问题,例如

è é ü û ă 等等

但我的问题是,当我在 javascript 中使用相同的表达式时,它允许这些字符,即使在服务器端,相同的表达式也允许这些字符。

我认为 '\w' 允许所有字母数字字符以及非英文字符,但是 我不知道为什么在验证器中使用它时不允许。

如果我做错了什么,请提出建议。

【问题讨论】:

    标签: javascript asp.net controls


    【解决方案1】:

    \w 表示单词字符。并且单词字符的定义可能因实现而异。有些只使用[A-Za-z0-9_],而另一些还包括非美国ASCII字符(参见comparison of regular expression flavors中的“ascii-only”)。

    如果您想确保使用相同的字符,请明确列出它们,如 [A-Za-z0-9_èéüûă]

    【讨论】:

    【解决方案2】:

    这是 ECMAScript 标准的限制; f.e.在 .NET 中 \w 也匹配非英文字符。

    最简单的解决方案是在使用 ASP.NET 时关闭客户端验证,以便服务器端验证器(使用 .NET 实现)进行相应的验证。


    var r = new Regex(@"\w");
    foreach(var m in r.Matches("è é ü û a"))
          Console.WriteLine(m);
    
    Output:
    è
    é
    ü
    û
    a
    

    【讨论】:

    • 您好 Jan,感谢您的回复。这意味着我无法使用验证器验证非英语字符。我现在不能在我的应用程序中包含客户端脚本。有没有其他方法可以让我只通过验证器进行验证?
    【解决方案3】:

    这是一个已知问题:ASP.Net 正则表达式客户端验证器对于非英文字符存在错误。您可以使用服务器端验证(如果可以的话),也可以编写自己的客户端 CustomValidator。

    【讨论】:

    • 感谢您的回复,它澄清了情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多