关于ruby:自定义正则表达式i18n

Custom regular expression i18n

我用的是3.2号铁轨。

我正在罗马尼亚本地化我的网站。在正则表达式中,regexp间隔[a-z]应按顺序包含以下字母:A,?,A、B、C等。

有没有一种方法可以告诉我的应用程序[a-z]应该是上面的列表,基于我的区域设置?

此外,大写"a".upcase不会导致"?"也有问题。.

或者,也许这些特性还没有在Rails中实现?


这不是Rails问题,[a-z]不需要包含非ASCII字符。在Ruby的例子中,[a-z]表示一个与连续的ASCII字母匹配的regex范围。

在Ruby中,string.upcase不需要依赖于区域设置。相反,您可以尝试使用unicodeutils gem,如下所示:

%gem安装unicode-utils

1
2
3
4
#encoding: UTF-8
require 'unicode_utils'

p UnicodeUtils.upcase('?', :ro)

"?"

在转换字符串大小写时指定区域设置更有意义,因为例如:

1
2
 UnicodeUtils.upcase('i', :en) # is not equal to
 UnicodeUtils.upcase('i', :tr)


我认为[a-z]序列是基于ASCII码的,所以不考虑罗马尼亚字符。如果要匹配任何拉丁字符,请使用onigmo的character属性:

1
2
"?" =~ /\p{Latin}/
# => 0