【问题标题】:How to prevent ’ character being entered into a textbox?如何防止 ' 字符被输入到文本框中?
【发布时间】:2016-06-08 13:51:20
【问题描述】:

我试图阻止 字符被输入到文本框中。 问题是如果您复制并粘贴 字符,它会变成一个右单引号,这会在尝试将文本框保存到数据库时导致 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");
}

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

【问题讨论】:

  • 右撇号如何导致 SQL 错误,而“常规”撇号不会?
  • @DStanley 如果您单击用于 unicode 查找的链接并输入 ,它将成为一个右引号。只有当我从诸如电子邮件之类的东西中复制撇号时才会发生这种情况。然后右单引号会导致 sql 错误。
  • 但是一个撇号有效吗?或者您是在连接字符串并且撇号导致错误?如果这是问题所在,那么通过使用参数而不是连接字符串来修复 that
  • 是的,单个撇号有效。
  • 但是错误是什么?我不明白正确的引用是如何导致错误的,除非您正在执行某种可能可以修复的字符串操作。

标签: c# mysql asp.net regex apostrophe


【解决方案1】:

与其阻止用户进入(尤其是在他们复制和粘贴的情况下),如果你真的需要删除它,你最好自己替换它:

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

这样,您不会妨碍您的用户,并且您仍然会删除此角色。

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

【讨论】:

  • 看到 cmets,看来 OP 有编码问题,与输入或字符串连接无关
【解决方案2】:

是否可以只使用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);

编辑:误解了最初的意图。

【讨论】:

  • OP 需要将 from RIGHT SINGLE QUOTATION MARK to 撇号转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2016-02-14
  • 1970-01-01
  • 2014-04-16
  • 2016-01-06
  • 1970-01-01
相关资源
最近更新 更多