Подтверждение ввода Кана
Я работаю над приложением, которое позволяет пользователям вводить символы японского языка. Я пытаюсь найти способ определить, является ли пользовательский ввод японской кана (хирагана, катакана или кандзи).
В приложении есть определенные поля, в которых ввод латинского текста был бы неуместным, и мне нужен способ ограничить определенные поля только кандзи или только катаканой и т. Д.
В проекте используется кодировка UTF-8. Я не ожидаю принять JIS или Shift-JIS.
Идеи?
3 ответа
Похоже, вам нужно просто проверить, находится ли каждый символ Юникода в определенном диапазоне. Диаграммы кодов Unicode должны быть хорошей отправной точкой.
Если вы используете.NET, моя библиотека MiscUtil имеет некоторую поддержку диапазона Unicode - она примитивна, но она должна делать свою работу. У меня нет источника для передачи прямо сейчас, но я обновлю этот пост с примером позже, если это будет полезно.
Не уверен в идеальном ответе, но в Википедии указан диапазон Unicode для катаканы и хираганы. (Что я ожидаю, также доступны на http://unicode.org/.)
- Хирагана: Юникод: 3040-309F
- Катакана: Юникод: 30A0–30FF
Проверка этих диапазонов по входным данным должна работать как проверка для хирагана или катакана для Unicode в не зависящей от языка манере.
Для кандзи я бы ожидал, что это будет немного сложнее, так как я ожидаю, что китайские иероглифы, используемые в китайском и японском языках, включены в один и тот же диапазон, но опять же, я могу ошибаться. (Я не могу ожидать, что Упрощенный китайский и Традиционный китайский будут включены в один и тот же диапазон...)
Ой ой! У меня был этот один раз... У меня было регулярное выражение с хирагана, затем катакана и затем кандзи. Я забыл точные коды, пойду посмотрю.
регулярное выражение замечательно, потому что вы удваиваете проблемы. И я сделал это на PHP, мой выбор для очень сильной автоматической генерации проблем
--редактировать--
$pattern = '/[^\wぁ-ゔァ-ヺー\x{4E00}-\x{9FAF}_\-]+/u';
Я нашел это здесь, но это не здорово... Я буду продолжать искать
--edit-- Я просмотрел свой портативный жесткий диск.... Я думал, что сохранил этот конкретный фрагмент из последней компании... извините.