c#之客户端验证,包括 unicode 字符范围

落叶无声 阅读:38 2026-07-28 15:07:40 评论:0

我的页面上有一个 asp:Textbox 以及一个 asp:RegularExpressionValidator。现在,我尝试验证任何文化的任何字符的输入,即德语名称 Günter。不幸的是,客户端验证失败了,而不是服务器端验证,因为在正则表达式模式中使用 \w 时,JavaScript 无法匹配所有区域性字母。使用显式字符是可行的(^[\wäÜÖäüö]+$),但这不是解决方案,因为我必须支持所有文化的所有字母。

说实话,我需要 JavaScript 中的 \p{L} 。有一个库(XRegExp)可以很好地支持这一点。但是,如何强制 ASP.NET 使用此库而不是 JavaScript 的默认正则表达式函数?我不想使用 asp:CustomValidator 并为我创建的每个表单做更多的工作。

请您参考如下方法:

RegularExpressionValidator 中的验证是在服务器端或客户端完成的。

当您设置 EnableClientScript="false"时,您可以使用“\p{L}”来验证“Günter”

<asp:TextBox ID="txtbox1" runat="server" /> 
<asp:Button ID="Button1" Text="Submit" runat="server" /> 
 
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" 
        ControlToValidate="txtbox1"   
        ValidationExpression="\p{L}+" 
        EnableClientScript="false" 
        ErrorMessage="Error" 
        runat="server" /> 

如果EnableClientScript="true",则您的正则表达式必须符合ECMAScript,否则将会失败。 ECMAScript 和规范正则表达式的行为有所不同,请参阅 ECMAScript Matching Behavior .

换句话说,要匹配 unicode 字母,您需要设置每个字母的精确代码或类似于 a-zA-Z 的字母之间的范围。

示例:要匹配 À-ž 中的大多数“欧洲”字母(请参阅字符映射工具),请使用

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" 
        ControlToValidate="txtbox1"   
        ValidationExpression="[a-zA-Z\u00c0-\u017e]+" 
        EnableClientScript="true" 
        ErrorMessage="Error" 
        runat="server" />  


标签:C#
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号