我正在尝试使用下面的代码在表单上设置正则表达式验证。我想允许任何字母字符,包括重音符号,数字和连字符,撇号,逗号和空格。此表达式应与结果匹配:“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 /
谁能告诉我我做错了什么?
答案 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