我在使用非标准utf-8字符时遇到了一个验证正则表达式的问题。因此,我进行了一些实验,发现当在Rails环境或纯Ruby中使用时,Ruby正则表达式的行为是不同的。
下面是我的一个中文字符串实验:
在纯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改变了正则表达式的行为方式,我没有找到一种方法让它像普通的ruby一样运行。