C# 如何在asp.net中限制像汉字这样的多字节字符输入

C# 如何在asp.net中限制像汉字这样的多字节字符输入,c#,asp.net,varchar,C#,Asp.net,Varchar,我的sql表设计为只允许varchar。 如果某些汉字被复制粘贴到我的文本框并传递到db。该值在表中存储为“?”。所以我需要将输入值限制为单字节值。 我怎样才能做到这一点 提前感谢使用正则表达式匹配输入。 多字节字符(包括中文)匹配如下: [^\x00-\xff] 以下是您如何使用它: string input = "abc123#¥@%¥%&这ef是g测试hi$"; string output = Regex.Replace(input, "[^\x00-\xff]",string

我的sql表设计为只允许varchar。 如果某些汉字被复制粘贴到我的文本框并传递到db。该值在表中存储为“?”。所以我需要将输入值限制为单字节值。 我怎样才能做到这一点

提前感谢

使用正则表达式匹配输入。 多字节字符(包括中文)匹配如下:

[^\x00-\xff]
以下是您如何使用它:

string input = "abc123#¥@%¥%&这ef是g测试hi$";

string output = Regex.Replace(input, "[^\x00-\xff]",string.Empty);

//output:abc123#@%%&efghi$

/* '¥'is a multi-byte character' */

“单字节值”到底是什么意思?可以由单个字节表示的字符集取决于您使用的编码。你有什么理由只想使用varchar吗?@JonSkeet我的数据库架构是只使用varchar。所以我现在不能改变它。所谓单字节值,我指的是那些与Varchar字段兼容且没有任何数据丢失的值,这取决于您在数据库中使用的编码,以及您正在使用的数据库,您都没有告诉我们。“我的数据库体系结构是只使用Varchar。所以我现在无法更改它。”-当然可以。@shatthi:我认为默认编码将取决于您安装它的服务器的区域设置,所以我们仍然不知道…这将确定值是否在U+0000到U+00FF范围内。这不一定对应于编码后的单字节值。。。这取决于数据库使用的编码。实际上,
[^\x00-\xff]
只匹配2字节字符,而有些汉字是4字节。更好的方法是使用
IsDBCSLeadByte()
@Rhysbevillaqua