我的页面中有电子邮件字段,我正在使用我的asp.net提供的正则表达式验证器进行验证。我正在使用相同的验证表达式以及电子邮件验证器,即
ValidationExpression = “\ W +([ - +'] \ W +)的 @ \ W +([ - ] \ W +) \ W +([ - ] \ W +)。*”< / p>
工作正常,但是当我尝试提供非英文字母时出现问题,例如
èéüûă等。
但我的问题是,当我在javascript中使用相同的表达式时,它允许这些字符,即使在服务器端,同样的表达式也允许这些字符。
我认为'\ w'允许所有字母数字字符以及非英文字符但是 我不知道为什么在验证器中使用它时不允许。
如果我做错了,请建议。
答案 0 :(得分:2)
\w
表示单词字符。字符的定义可能因实现而异。有些只使用[A-Za-z0-9_]
,有些还包含非US-ASCII字符(请参阅comparison of regular expression flavors中的“ascii-only”)。
如果您想确保使用相同的字符,请明确列出[A-Za-z0-9_èéüûă]
。
答案 1 :(得分:1)
这是一个众所周知的问题:ASP.Net正则表达式客户端验证器对于非英语字符来说是错误的。您可以使用服务器端验证(如果它是一个选项),也可以编写自己的客户端CustomValidator。
答案 2 :(得分:1)
这是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