如何将重音字符与正则表达式匹配?

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)

不过,这确实不仅仅是重音字符.这是件好事.请务必阅读此博客文章,了解有关软件应用程序中名称的常见误解.

  • 实际上,**\w**应该替换为**[:alnum:]**.如果你想匹配不是字母数字字符的东西,只需用**[[:^ alnum:]]**替换**[^\w]**. (3认同)
  • 我无法使用`[:alpha:]`来使用Ruby 2.2.2,但是能够让`\ p {Alpha}`工作.请参阅Ruby`Regexp`字符属性http://ruby-doc.org/core-2.1.1/Regexp.html#class-Regexp-label-Character+Properties. (2认同)