use*_*052 32 ruby regex ruby-on-rails pattern-matching ruby-on-rails-3
我正在运行Ruby on Rails 3.0.10和Ruby 1.9.2.我使用以下正则表达式来匹配名称:
NAME_REGEX = /^[\w\s'"\-_&@!?()\[\]-]*$/u
validates :name,
:presence => true,
:format => {
:with => NAME_REGEX,
:message => "format is invalid"
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我试图保存一些像下面这样的词:
Oilalà
Pì
Rùby
...
# In few words, those with accented characters
Run Code Online (Sandbox Code Playgroud)
我有一个验证错误"Name format is invalid.
.
我怎样才能改变上述正则表达式,从而匹配等也重音符号à
,è
,é
,ì
,ò
,ù
,...?
Lar*_*eth 57
而不是\w
使用POSIX括号表达式 [:alpha:]
:
"blåbær dèjá vu".scan /[[:alpha:]]+/ # => ["blåbær", "dèjá", "vu"]
"blåbær dèjá vu".scan /\w+/ # => ["bl", "b", "r", "d", "j", "vu"]
Run Code Online (Sandbox Code Playgroud)
在您的特定情况下,将正则表达式更改为:
NAME_REGEX = /^[[:alpha:]\s'"\-_&@!?()\[\]-]*$/u
Run Code Online (Sandbox Code Playgroud)
不过,这确实不仅仅是重音字符.这是件好事.请务必阅读此博客文章,了解有关软件应用程序中名称的常见误解.