RoR字符类正则表达式

Arn*_*old 8 ruby regex ruby-on-rails cjk

我在Ruby on Rails应用程序中有以下代码行,它检查给定字符串是否包含韩语字符:

isKorean = !/\p{Hangul}/.match(word).nil?
Run Code Online (Sandbox Code Playgroud)

它在控制台中运行良好,但会为实际应用程序引发语法错误:

invalid character property name {Hangul}: /\p{Hangul}/
Run Code Online (Sandbox Code Playgroud)

我错过了什么,我怎样才能让它发挥作用?

And*_*all 13

这是一个字符编码问题,您需要添加:

# encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

在你正在使用该正则表达式的Ruby文件的顶部.如果你愿意,你可以使用你正在使用的字符类而不是UTF-8的任何编码.请注意,在Ruby 2.0中,UTF-8现在是默认值,因此Ruby 2.0+中不需要这样做.

这被称为"魔术评论".您可以而且应该在Ruby 1.9中阅读有关编码的更多信息.请注意,Rails视图中的编码由config.encoding(默认情况下设置为UTF-8)自动处理config/application.rb.

它可能在控制台中工作,因为您的终端已设置为使用UTF-8.

  • @ArnoldSakhnov是的,该设置仅适用于视图(可能是因为Rails可以在呈现视图时设置编码,但Ruby是一个加载类文件等). (2认同)