2011-05-23 12 views
9

Tengo un problema con una de mis expresiones regulares de validación cuando utilizo caracteres utf-8 no estándar. Entonces, realizo algunos experimentos y parece que el rubí regex se comporta diferente cuando hay un entorno de rieles o en rubí simple.Comportamiento extraño de ruby ​​regex en rieles con utf8 char

Publico aquí mi expriment con una cadena china.

En Ruby "puro":

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

En rieles:

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

Si omito # coding: utf-8, viene con invalid multibyte char (US-ASCII). De todos modos, incluso con esto, no coincide.

Por supuesto, he comprobado todo (ruby_version, la codificación de archivos de comandos en UTF-8 ..)

que utilizo:

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

Así que mi conclusión es que los rieles alteran la forma en que se comportan las expresiones regulares y no encontré la manera de hacerlo funcionar en rubíes normales.

+1

no puede realmente ayudar con ROR 1, pero para una buena pregunta - es obvio que ha intentado y ha hecho su tarea. – Kobi

+0

Gracias, sí. Sigo buscando excelentes artículos sobre utf-8 y ruby ​​1.8/1.9 pero nada relacionado con este problema. – Hartator

+0

FWIW - su prueba funciona en 1.8.7 - no estoy seguro si esa es una opción para usted. – smathy

Respuesta

7

Ok, encontré una respuesta a mi problema. El \w se comporta solo con el carácter ascii en ruby ​​1.9 contra todos los caracter unicode en ruby ​​1.8. En Ruby 1.9, ahora tenemos que utilizar: [\w\P{ASCII}]

Más informaciones: http://www.ruby-forum.com/topic/210770

+1

¡Qué agradable silencio silencioso y difícil de detectar :) – Sebastian

Cuestiones relacionadas