RoR で、utf8 コードを使用して投稿フォームの中国語または日本語の単語を検証する方法。
GBK コードでは、[\u4e00-\u9fa5]+ を使用して中国語の単語を検証します。Php では、utf-8 ページに /^[\x{4e00}-\x{9fa5}]+$/u を使用します。
RoR で、utf8 コードを使用して投稿フォームの中国語または日本語の単語を検証する方法。
GBK コードでは、[\u4e00-\u9fa5]+ を使用して中国語の単語を検証します。Php では、utf-8 ページに /^[\x{4e00}-\x{9fa5}]+$/u を使用します。
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 までの範囲を表す 8 進値を持つ正規表現です。
Oniguruma regexpエンジンは、Unicodeを適切にサポートしています。Ruby1.9はデフォルトで鬼車を使用します。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 オブジェクトのエンコード方法