ruby 正则表达式在带有 utf8 字符的 Rails 中的奇怪行为

发布于 2024-11-09 14:23:33 字数 698 浏览 0 评论 0原文

使用非标准 utf-8 字符时,我的验证正则表达式之一出现问题。因此,我进行了一些实验,发现 ruby​​ 正则表达式在 Rails 环境或普通 ruby​​ 中的行为有所不同。

我在这里发布了我用中文字符串进行的实验。

在ruby“pure”中:

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,它会带有无效的多字节字符(US-ASCII)。无论如何,即使这样,也不相符。

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

我使用:

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

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

I have problem with one of my validation regex when using nonstandard utf-8 character. So, I run a few experiments and it appears that ruby regex behave different when there are with rails environment or in plain ruby.

I post here my expriment with a Chinese string.

In ruby "pure" :

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

In rails :

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

If I omit # coding: utf-8, it comes with invalid multibyte char (US-ASCII). Anyway, even with this, it doesn't match.

Of course, I have checked everything (ruby_version, encoding of script files in utf-8..)

I use :

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

So my conclusion is that rails alter the way regex behave and I did not find a way to make it behaves like in normal ruby.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

春花秋月 2024-11-16 14:23:33

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

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

Ok, I found an answer to my problem. The \w behaves only with ascii character in ruby 1.9 against all unicode caracter in ruby 1.8. In ruby 1.9, now we have to use : [\w\P{ASCII}]

More infos : http://www.ruby-forum.com/topic/210770

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文