使用非标准的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改变了正则表达式的行为方式,我没有找到一种方法使其表现得像普通红宝石一样。
答案 0 :(得分:7)
好的,我找到了问题的答案。 \w
仅对ruby 1.9中的ascii字符表示反对ruby 1.8中的所有unicode字符。在ruby 1.9中,现在我们必须使用:[\w\P{ASCII}]