如何防止'字符进入文本框?

时间:2016-06-08 13:51:21

标签: c# mysql asp.net regex apostrophe

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

是否还有一种方法可以让用户输入撇号但是阻止单右引号?

2 个答案:

答案 0 :(得分:4)

不要阻止用户进入(特别是如果他们正在复制和粘贴),如果你真的需要摆脱它,你最好自己更换角色:

.pure-form-aligned .pure-group .pure-control-group {
  margin: 0;
}
.pure-form.pure-form-aligned .pure-group .pure-control-group input {
  display: inline-block;
  position: relative;
  margin: 0 0 -1px;
  border-radius: 0;
  top: -1px;
}
.pure-form-aligned .pure-group .pure-control-group:first-child input {
  top: 1px;
  border-radius: 4px 4px 0 0;
  margin: 0;
}
.pure-form-aligned .pure-group .pure-control-group:last-child input {
  top: -2px;
  border-radius: 0 0 4px 4px;
  margin: 0;
}

通过这种方式,您不会妨碍用户,但您仍会删除此字符。

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

答案 1 :(得分:0)

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

编辑:误解了原意。