如何在ruby中使用regex for utf8

now*_*owa 11 ruby regex ruby-on-rails utf-8

在RoR中,如何使用utf8代码验证中文或日语单词的发布表单.

在GBK代码中,它使用[\ u4e00-\u9fa5] +来验证中文单词.在Php中,它使用/ ^ [\ x {4e00} - \x {9}} + $/u来表示utf-8页面.

Rôm*_*con 10

Ruby 1.8对UTF-8字符串的支持很差.您需要在正则表达式中单独编写字节,而不是完整代码:

>> "acentuação".scan(/\xC3\xA7/)
=> ["ç"]    
Run Code Online (Sandbox Code Playgroud)

要匹配您指定的范围,表达式将变得有点复杂:

/([\x4E-\x9E][\x00-\xFF])|(\x9F[\x00-\xA5])/  # (untested)
Run Code Online (Sandbox Code Playgroud)

不过,这将在Ruby 1.9中得到改进.

编辑:如评论中所述,unicode字符\ u4E00-\u9FA5仅映射到UTF16-BE编码中的上述表达式.UTF8编码可能不同.因此,您需要仔细分析映射,看看是否可以为Ruby 1.8提供字节匹配表达式.