Странное поведение регулярного выражения ruby ​​в рельсах с символом utf8 - PullRequest
9 голосов
/ 23 мая 2011

У меня проблема с одним из моих регулярных выражений проверки при использовании нестандартного символа utf-8. Итак, я провожу несколько экспериментов, и кажется, что регулярное выражение ruby ​​ведет себя по-разному, когда это происходит в среде rails или в обычном ruby.

Я публикую здесь свой экспримент с китайской строкой.

В рубине "чистый":

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 ..)

Я использую:

  • Рельсы 3.0.7
  • Ruby 1.9.2 (ruby-1.9.2-p180)

Итак, я пришел к выводу, что рельсы изменяют поведение регулярного выражения, и я не нашел способа заставить его вести себя как в обычном ruby.

1 Ответ

7 голосов
/ 24 мая 2011

Хорошо, я нашел ответ на свою проблему.\w ведет себя только с символом ascii в ruby ​​1.9 против всех символов Unicode в ruby ​​1.8.В ruby ​​1.9 теперь мы должны использовать: [\w\P{ASCII}]

Больше информации: http://www.ruby -forum.com / topic / 210770

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...