我正在制作一个法语动词共轭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强大以来我没想到。
任何人都可以给我一个线索吗?
答案 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。