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

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
Run Code Online (Sandbox Code Playgroud)

在铁轨中:

# coding: utf-8
task :test => :environment do
  string = "???"
  puts string[/\A[\w]*\z/]
end
$ rake test
=> nothing - not ok
Run Code Online (Sandbox Code Playgroud)

如果我省略# 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中表现得像.

Har*_*tor 7

好的,我找到了问题的答案.在\w仅与红宝石1.9反对红宝石1.8所有Unicode卡拉科特ASCII字符的行为.在ruby 1.9中,现在我们必须使用:[\w\P{ASCII}]

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

  • 多安静啊,而且很难发现破损:) (2认同)