В RoR, как проверить китайское или японское слово для формы публикации с кодом utf8.
В коде GBK он использует [\ u4e00-\u9fa5] + для проверки китайских слов. В Php он использует /^ [\ x {4e00} -\x {9fa5}] + $/u для страниц utf-8.
В RoR, как проверить китайское или японское слово для формы публикации с кодом utf8.
В коде GBK он использует [\ u4e00-\u9fa5] + для проверки китайских слов. В Php он использует /^ [\ x {4e00} -\x {9fa5}] + $/u для страниц utf-8.
Ruby 1.8 плохо поддерживает строки UTF-8. Вам нужно написать байты отдельно в регулярном выражении, а не полный код:
>> "acentuação".scan(/\xC3\xA7/)
=> ["ç"]
Чтобы соответствовать указанному диапазону, выражение станет немного сложным:
/([\x4E-\x9E][\x00-\xFF])|(\x9F[\x00-\xA5])/ # (untested)
Это будет улучшено в Ruby 1.9, однако.
Изменить: как отмечено в комментариях, символы Unicode\u4E00-\u9FA5 только сопоставляются с выражением выше в кодировке UTF16-BE. Кодировка UTF8, вероятно, будет отличаться. Поэтому вам нужно тщательно проанализировать отображение и посмотреть, можете ли вы найти выражение для байт-выражения для Ruby 1.8.
Это то, что я сделал:
%r{^[#{"\344\270\200"}-#{"\351\277\277"}]+$}
Это в основном регулярное выражение с восьмеричными значениями, которые представляют диапазон между U + 4E00 и U + 9FFF, наиболее распространенными китайскими и японскими символами.
Oniguruma двигатель regexp имеет надлежащую поддержку Unicode. Ruby 1.9 использует Oniguruma по умолчанию. Ruby 1.8 можно перекомпилировать, чтобы использовать его.
С Oniguruma вы можете использовать то же самое регулярное выражение, что и в PHP, включая модификатор /u, чтобы заставить Ruby обрабатывать строку как UTF-8.
activeSupport имеет обработчик UTF-8
http://api.rubyonrails.org/classes/ActiveSupport/Multibyte/Handlers/UTF8Handler.html
иначе, посмотрите в ruby 1.9, метод кодирования для объектов Regexp