繁体   English   中英

正则表达式验证器不允许\ w的非英语字符

[英]Regular expression validator is not allowing non-english characters for \w

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

ValidationExpression =“\\ w +([ - +。'] \\ w +) @ \\ w +([ - 。] \\ w +) 。\\ w +([ - 。] \\ w +)*”

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

èéüûă等

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

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

如果我做错了,请建议。

\\w表示单词字符。 字符的定义可能因实现而异。 有些只使用[A-Za-z0-9_]而有些也包含非US-ASCII字符(在正则表达式风味比较中参见“ascii-only”)。

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

这是一个众所周知的问题:ASP.Net正则表达式客户端验证器是非英语字符的错误。 您可以使用服务器端验证(如果它是一个选项),也可以编写自己的客户端CustomValidator。

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

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


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

Output:
è
é
ü
û
a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM