當我使用非標準的utf-8字符時,我的驗證正則表達式有問題。所以,我運行了一些實驗,看來ruby正則表達式在使用rails環境或普通ruby時表現不同。utf8字符串中的ruby正則表達式的奇怪行爲
我在這裏發佈我的expriment中文字符串。
在紅寶石 「純」:
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 3.0.7
- 的Ruby 1.9.2( ruby-1.9.2-p180)
所以我的結論是,軌改變了正則表達式的行爲方式,我沒有找到一種方式,使其行爲像在正常的紅寶石。
不能真正與ROR幫助,但+1一個很好的問題 - 很明顯,你已經嘗試和做功課。 – Kobi 2011-05-23 11:03:53
謝謝,是的,我繼續搜索發現有關utf-8和ruby 1.8/1.9的優秀文章,但沒有涉及到這個問題。 – Hartator 2011-05-23 12:27:39
FWIW - 您的測試在1.8.7中工作 - 不確定這是否適合您。 – smathy 2011-05-23 16:18:35