在rails中使用áêìõü的validate_format_of字符串

时间:2012-03-27 15:11:16

标签: ruby-on-rails ruby encoding

我正在制作一个法语动词共轭Rails网站,用户可以插入动词的结合,如:

     se abstenir
     m'appelle
     êtes
     achète

我需要验证那些动词的格式。撇号很简单,但êèã字符呢?

到现在为止我已经:

    word_format = /\A[\w]+[' ]?[\w]*\z/
    validates_format_of (...), :with => word_format

这显然不起作用,因为\ w与它们不匹配。还包括reêĩ(...)到regexp给我一个无效的多字节字符(US-ASCII)错误。

我还需要对这些字符串进行大写,而ruby忽略这些字符串,例如导致'VOUSêTES'。琐碎的答案似乎是手工完成,但我希望Ruby / Rails再次让我感到惊讶。

它似乎是一个难题,而且自Ruby / Rails强大以来我没想到。

任何人都可以给我一个线索吗?

2 个答案:

答案 0 :(得分:0)

\w [:alpha] {}需要使用POSIX括号表达式word_format = /\A[:alpha]+[' ]?[\w]*\z/

{{1}}

答案 1 :(得分:0)

您需要为upcasing事件安装UnicodeUtils

#encoding: utf-8
require "unicode_utils/upcase"
puts UnicodeUtils.upcase("êtes Niño")#=> ÊTES NIÑO

正则表达式可能如下所示:

word_format = /\A[[:word:]]+[' ]?[[:word:]]*\z/

/[[:word:]]/ - 以下Unicode常规类别之一中的字符Letter,Mark,Number,Connector_Punctuation。