Rails正则表达式语法错误

时间:2016-04-26 15:58:07

标签: ruby-on-rails ruby regex

我正在尝试使用下面的代码在表单上设置正则表达式验证。我想允许任何字母字符,包括重音符号,数字和连字符,撇号,逗号和空格。此表达式应与结果匹配:“Tiràl'arc,3d,danse”

validates :interest_list, tags: true, if: lambda { interest_list.any? }
  validates :interest_list, format: { with: /\A[[:alpha:]\d-'’, ]\z/, message: "only allows letters, space, hyphen and apostrophe" }

但我在char类中有空范围错误:/ \ A [[:alpha:] \ d - '',] \ z /

谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:4)

在第一个或最后一个位置以外的任何位置出现在字符类内的任何-都被视为范围,即。 [0-9][0123456789]的简写。此范围基于ASCII值计算。

您的正则表达式中有\d-'\d无法用于范围的开头/结尾。您可能希望将-移至[]的开头或结尾

/\A[[:alpha:]\d'’, -]\z/

...并解决你的下一个问题/问题 - 因为你的正则表达式只会匹配一个字符,你可能还想在该字符类上重复一次,如+

/\A[[:alpha:]\d'’, -]+\z/

答案 1 :(得分:0)

Error: Regex Construction .. 

Invalid range end in character class

\A[[:alpha:]\d->>>HERE>>>'’, ]\z  

\d - anything的范围无效,因为范围运算符-无法执行 指定类和其他任何内容之间的范围。

您需要逃离-以使其成为文字\A[[:alpha:]\d\-'’, ]\z

或将其添加到结尾或开始\A[[:alpha:]\d'’, -]\z