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

标签 ruby-on-rails ruby regex ruby-on-rails-3 pattern-matching

我正在运行 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"
  }

但是,如果我尝试保存如下的一些单词:

Oilalà
Pì
Rùby
...

# In few words, those with accented characters

我有一个验证错误“名称格式无效。

我如何更改上面的正则表达式以便匹配重音字符,如 àèé ì, ò, ù, ...?

最佳答案

代替\w,使用POSIX bracket expression [: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"]

在您的特定情况下,将正则表达式更改为:

NAME_REGEX = /^[[:alpha:]\s'"\-_&@!?()\[\]-]*$/u

不过,这确实匹配的不仅仅是重音字符。这是一个 好东西。请务必阅读 this blog entry关于常见的误解 关于软件应用程序中的名称。

关于ruby-on-rails - 如何将重音字符与正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7292395/

相关文章:

python - 我怎样才能用正则表达式标记这个?

ruby-on-rails - Rails 找到有两个具有特定属性的子级的父级

ruby - 如何计算段落中特定单词的实例数?

java - 什么是有效的 UUID?

regex - 从 Jmeter 的站点地图中替换 ${url} 的一部分

ruby-on-rails - Rails - 我可以使用观察者取消模型的保存吗

ruby-on-rails - Rails部署的现状

mysql - 使用不同的数据库执行单个查询。 Rails 上的 Ruby

ruby-on-rails - 在Heroku上每分钟安排一次Rails 3.1

sql - 使用 Rails 在 Postgres 中开发自定义函数