使用utf8 char在rails中使用ruby正则表达式的奇怪行为

时间:2011-05-23 09:51:35

标签: ruby-on-rails ruby regex ruby-on-rails-3 utf-8

使用非标准的utf-8字符时,我的验证正则表达式有问题。所以,我进行了一些实验,看来ruby regex在有rails环境或普通ruby时表现不同。

我在这里发布了一个中文字符串。

红宝石“纯粹”:

string = "運動會"
puts string[/\A[\w]*\z/]
=> match "運動會" - ok

在rails中:

# coding: utf-8
task :test => :environment do
  string = "運動會"
  puts string[/\A[\w]*\z/]
end
$ rake test
=> nothing - not ok

如果我省略# coding: utf-8,则会附带invalid multibyte char (US-ASCII)。无论如何,即使这样,它也不匹配。

当然,我已经检查了所有内容(ruby_version,utf-8中脚本文件的编码..)

我用:

  • Rails 3.0.7
  • Ruby 1.9.2(ruby-1.9.2-p180)

所以我的结论是,rails改变了正则表达式的行为方式,我没有找到一种方法使其表现得像普通红宝石一样。

1 个答案:

答案 0 :(得分:7)

好的,我找到了问题的答案。 \w仅对ruby 1.9中的ascii字符表示反对ruby 1.8中的所有unicode字符。在ruby 1.9中,现在我们必须使用:[\w\P{ASCII}]

更多信息:http://www.ruby-forum.com/topic/210770