如何防止 ’ 字符被输入文本框?

How to prevent ’ character being entered into a textbox?

我试图阻止 字符被输入到文本框中。 问题是,如果您复制并粘贴 字符,它会变成右单引号,这会在尝试将文本框保存到数据库时导致 sql 出错。

您可以在 unicode lookup

如果您在 ' 中手动输入,那么它是一个撇号并且该字符被接受。

问题是人们将电子邮件中的这个字符复制并粘贴到文本框中,然后它被转换为右单引号。

Regex regex = new Regex(@"^[a-zA-Z0-9]*$");
Match match = regex.Match(txtName.Text);
if (!match.Success)
{
     DisplayMsg("Name contains invalid character");
}

有没有办法仍然允许用户输入撇号但阻止右单引号?

与其阻止用户输入(尤其是当他们正在复制和粘贴时),不如自己替换字符,如果您真的需要删除它的话:

txtName.Text = txtName.Text
    .Replace((char) 0x2018, '\'')  // ‘ ‘
    .Replace((char) 0x2019, '\'')  // ’ ’
    .Replace((char) 0x201C, '"')   // “ “
    .Replace((char) 0x201D, '"');  // ” ”

这样,您就不会妨碍您的用户,而且您仍会删除此字符。

但是,听起来您可能正在使用字符串连接构建查询,这是一个更严重的问题!

是否可以仅使用 HttpUtility.HtmlEncode("A string with lot's of q'o'u't'e's that should work f'i'n'e'") 对字符串进行编码,从而导致 A string with lot's of q'o'u't'e's that should work f'i'n'e'...

因为我不能评论除了我自己以外的任何人的答案,所以我必须这样做。

基于@Richard 的解决方案,它可以让其他人更容易阅读。

string someString = "This has a left quote: ’\nThis has a right quote: ‘";

string sanitized = someString.Replace(HttpUtility.HtmlDecode("‘"), "'")
                                 .Replace(HttpUtility.HtmlDecode("’"), "'");
Console.WriteLine(sanitized);

编辑:误解了原意。