2012-05-23 2 views
0

Что было бы лучшим способом убедиться, что пользователь не вводит (или не копирует) японские символы в текстовые поля C# WinForms?Не разрешать японские символы в TextBox

Проблема в том, что наше программное обеспечение будет использоваться пользователями из Германии, Англии и Японии. Все виды символов и символов обрабатываются хорошо, но японские символы, похоже, вызывают определенные проблемы в базовой структуре сохранения.

+5

Возможно, вам лучше исправить бэкэнд. Ваши японские пользователи будут p.o.-ed, если они не смогут использовать свой родной язык с приобретенным вами программным обеспечением. – Crisfole

+2

, тогда вы должны исправить базовое решение для сохранения. http://www.joelonsoftware.com/articles/Unicode.html –

+3

Тег: дискриминация –

ответ

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

Хотя я должен согласиться, что лучший подход должен был бы исправить ваши проблемы с японскими иероглифами, если вы хотите японских клиентов.

1

Прочтите мой комментарий. Я действительно предлагаю вам исправить постоянную работу, чтобы работать правильно. Но так как это не отвечает на ваш вопрос, у вас есть два варианта:

  1. Используйте MaskedTextBox с маской и несколькими опциями. Или напишите свой собственный MaskedTextProvider.
  2. Альтернативно: обрабатывайте событие проверки и вручную проверяйте каждый символ, чтобы убедиться, что он не находится в японском диапазоне символов юникода.
0

Хотя я согласен с предыдущими плакатами, и, таким образом, не хочу, чтобы сделать меня тоже ответа, я хотел бы добавить что-то в отношении конкретно ввода «латинского» текста японского народа. В 99.99999% (да, это пять девяток, мы говорим об Erlang-подобной надежности здесь ;-) из случаев, даже когда они вводят текст латинскими буквами, скажите SUZUKI (общая фамилия), что вы действительно собираюсь есть SUZUKI. Codepoints в диапазоне FF20-FF60. К сожалению, я снова сломал ваш механизм настойчивости. И разозлили клиентов. Потому что они не поймут, почему вы отвергаете их совершенно правильные символы Latin. Или так они думали ...

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

Смежные вопросы