确保用户不会在 C# WinForms TextBox 中输入(或复制)日文字符的最佳方法是什么?
问题是我们的软件将被德语、英语和日语用户使用。各种字符和符号都处理得很好,但是日文字符似乎在底层持久化框架中造成了一些麻烦。
可以使用白名单吗?例如:
bool IsValidInput(String input)
{
return input != null && input.All(c => IsValidLetter(c));
}
bool IsValidLetter(char c)
{
return Char.IsNumber(c) || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}
虽然我必须同意,如果您想要日本客户,最好的方法是解决您使用日语字符的问题。
请阅读我的评论。我真的建议您修复持久性部分以使其正常工作。但由于这不能回答您的问题,您有两种选择:
MaskedTextProvider
。虽然我同意以前的海报,因此不想做我的回答,但我想添加一些关于日本人专门输入“拉丁”文本的内容。在 99.99999%(是的,这是 5 个 9,我们在这里谈论的是 Erlang 式的可靠性 ;-)的案例中,即使他们输入拉丁字符的文本,比如SUZUKI(一个常见的姓氏),你真正要做什么得到的是SUZUKI。范围内的代码点FF20-FF60
。糟糕,我再次破坏了你的持久性引擎。并且惹怒了顾客。因为他们不明白你为什么拒绝他们完全正确的拉丁字符。或者他们认为...
您只能将其用于英文字符;
private void txtSmsMessage_TextChanged(object sender, EventArgs e)
{
//sadece latin karakterlerin girilmesi saglanıyor.
string str = ((TextBox)sender).Text;
byte[] key = null;
if (!string.IsNullOrEmpty(str))
{
key = Encoding.Unicode.GetBytes(str.Substring(str.Length - 1, 1));
if (Convert.ToInt32(key[1]) != 0 || (Convert.ToInt32(key[0]) < 32 && Convert.ToInt32(key[0]) > 127))
{
txtSmsMessage.Text = txtSmsMessage.Text.Substring(0, str.Length - 1);
txtSmsMessage.SelectionStart = txtSmsMessage.Text.Length;
return;
}
}
}
如果您想使用其他语言,请查看此链接。 http://www.tamasoft.co.jp/en/general-info/unicode.html