0

确保用户不会在 C# WinForms TextBox 中输入(或复制)日文字符的最佳方法是什么?

问题是我们的软件将被德语、英语和日语用户使用。各种字符和符号都处理得很好,但是日文字符似乎在底层持久化框架中造成了一些麻烦。

4

4 回答 4

1

可以使用白名单吗?例如:

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');
} 

虽然我必须同意,如果您想要日本客户,最好的方法是解决您使用日语字符的问题。

于 2012-05-23T13:20:38.520 回答
1

请阅读我的评论。我真的建议您修复持久性部分以使其正常工作。但由于这不能回答您的问题,您有两种选择:

  1. 使用带有掩码和一些选项的MaskedTextBox 。或者自己写MaskedTextProvider
  2. 或者:处理验证事件,并手动检查每个字符以确保它不在日文的 unicode 字符范围内。
于 2012-05-23T13:22:06.007 回答
0

虽然我同意以前的海报,因此不想做的回答,但我想添加一些关于日本人专门输入“拉丁”文本的内容。在 99.99999%(是的,这是 5 个 9,我们在这里谈论的是 Erlang 式的可靠性 ;-)的案例中,即使他们输入拉丁字符的文本,比如SUZUKI(一个常见的姓氏),你真正要做什么得到的是SUZUKI。范围内的代码点FF20-FF60。糟糕,我再次破坏了你的持久性引擎。并且惹怒了顾客。因为他们不明白你为什么拒绝他们完全正确的拉丁字符。或者他们认为...

于 2012-05-27T06:39:09.250 回答
0

您只能将其用于英文字符;

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

于 2012-06-04T10:06:22.217 回答