Har*_*tor 9 ruby regex ruby-on-rails utf-8 ruby-on-rails-3
使用非标准的utf-8字符时,我的验证正则表达式有问题.所以,我进行了一些实验,看来ruby正则表达式在有rails环境或普通红宝石时表现不同.
我在这里发布了一个中文字符串.
在红宝石"纯":
string = "???"
puts string[/\A[\w]*\z/]
=> match "???" - ok
在铁轨中:
# 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改变了正则表达式的行为方式,而且我没有找到一种方法让它在正常的ruby中表现得像.
好的,我找到了问题的答案.在\w仅与红宝石1.9反对红宝石1.8所有Unicode卡拉科特ASCII字符的行为.在ruby 1.9中,现在我们必须使用:[\w\P{ASCII}]
更多信息:http://www.ruby-forum.com/topic/210770