Подтверждение ввода Кана - PullRequest
4 голосов
/ 23 декабря 2008

Я работаю над приложением, которое позволяет пользователям вводить символы японского языка. Я пытаюсь найти способ определить, является ли пользовательский ввод японской кана (хирагана, катакана или кандзи).

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

В проекте используется кодировка UTF-8. Я не ожидаю принять ввод JIS или Shift-JIS.

Идеи

Ответы [ 3 ]

6 голосов
/ 23 декабря 2008

Похоже, вам нужно просто проверить, находится ли каждый символ Юникода в определенном диапазоне. Диаграммы кодов Unicode должны быть хорошей отправной точкой.

Если вы используете .NET, моя библиотека MiscUtil имеет некоторую поддержку диапазона Юникода - она ​​примитивна, но должна выполнять свою работу. У меня нет источника для передачи прямо сейчас, но я обновлю этот пост с примером позже, если это будет полезно.

6 голосов
/ 23 декабря 2008

Не уверен в идеальном ответе, но есть диапазон Unicode для катакана и хирагана , перечисленных в Википедии. (Что я ожидаю, также доступно на unicode.org .)

  • Хирагана: Юникод: 3040-309F
  • Катакана: Юникод: 30A0–30FF

Проверка этих диапазонов по отношению к вводу должна работать как проверка для хирагана или катакана для Unicode в не зависящей от языка манере.

Для кандзи, я ожидаю, что это будет немного сложнее, так как я Ожидайте, что китайские иероглифы, используемые в китайском и японском языках, включены в один и тот же диапазон, но опять же, я могу ошибаться здесь. (Я не могу ожидать, что упрощенный китайский и традиционный китайский будут включены в один и тот же диапазон ...)

2 голосов
/ 24 апреля 2009

о, о! У меня был этот один раз ... У меня было регулярное выражение с хирагана, затем катакана и затем кандзи. Я забыл точные коды, пойду посмотрю.

регулярное выражение прекрасно, потому что вы удваиваете проблемы. И я сделал это на PHP, мой выбор для очень сильного автоматического создания проблемы

- изменить -

$pattern = '/[^\wぁ-ゔァ-ヺー\x{4E00}-\x{9FAF}_\-]+/u';

Я нашел это здесь , но это не здорово ... Я буду искать

- edit-- Я просмотрел свой портативный жесткий диск ... Мне показалось, что я сохранил этот фрагмент из последней компании ... извините.

...