2011-05-23 6 views
9

Standart olmayan utf-8 karakter kullanılırken doğrulama rejeksimden biriyle ilgili sorun yaşıyorum. Bu yüzden, birkaç denemeyi çalıştırıyorum ve yakut ortamı veya düz yakutta olduğu zaman yakut regexinin farklı davrandığı görülüyor.utf8 char olan raylarda ruby ​​regex'in garip davranışı

Buraya bir Çince dizeyle olan hayranlığımı gönderiyorum. yakut "saf" olarak

:

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

raylar içinde: Ben # coding: utf-8 atlarsanız

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

, bu invalid multibyte char (US-ASCII) ile birlikte gelir. Her neyse, bununla bile eşleşmiyor.

  • Raylar 3.0.7
  • Yakut 1.9.2 (:

    Tabii ki, her şey (ruby_version, utf-8 komut dosyalarını kodlama ..)

    kullandığım kontrol ettikten yakut-1.9.2-p180)

Yani benim sonuç, raylar yolu regex davranacaksan değiştirebilir ve bunu normal bir yakut gibi davranır yapmanın bir yolunu bulamadık olmasıdır.

+1

gerçekten ror yardımcı olamaz, ama +1 iyi bir soru için: [\w\P{ASCII}]

Daha çok bilgi: Ruby 1.9, artık biz kullanmak zorunda. – Kobi

+0

Teşekkür ederim, evet aramayı utf-8 ve ruby ​​1.8/1.9 ile ilgili harika makaleler buldum ama bu konuyla ilgili hiçbir şey bulunamadı. – Hartator

+0

FWIW - testiniz 1.8.7'de çalışıyor - bu sizin için bir seçenek olup olmadığından emin değil. – smathy

cevap

7

Sorunuma bir yanıt buldum. \w, ruby ​​1.8'deki tüm unicode caracter'e karşı ruby ​​1.9'da sadece ascii karakteri ile davranır. Eğer denedim açıktır ve ödevini yaptı - http://www.ruby-forum.com/topic/210770

+1

Ne güzel bir sessiz ve kırılmayı tespit etmek zor :) – Sebastian