0

我的模型中有一个名称属性,由

validates :name ,format:{with: /^[\p{L} \.'\-]+$/ , message: "invalid name" }

创建模型对象时发现以下语法错误

SyntaxError (basic_info.rb:8: invalid  property name {L}: /^[\p{L} \.'\-]+$/

显然 Ruby 正在尝试{L}在未定义的正则表达式中进行评估。在正则表达式中插入转义字符也会使其无效。

4

1 回答 1

0

编辑:根据这篇文章,它与编码有关。\p{L}在 Ruby 2.0.0 之前,ruby 脚本的默认编码不是 Unicode,因此在使用 unicode 字符属性正则表达式模式(例如!)时,这会导致您出现问题。

您需要将魔术# encoding: utf-8注释放在文件的顶部。


我刚刚做了一个快速的 IRB 测试,但你是否有机会使用 Ruby 1.8.7?

在 1.8.7 中:

>> "blah".match(/^[\p{L} \.'\-]+$/)
=> nil

在 2.0.0 中:

>> "blah".match(/^[\p{L} \.\-']+$/)
=> #<MatchData "blah">

似乎 1.8.7 Regexp 不支持 unicode 字符属性?考虑/^[a-zA-Z \.'\-]+$/改用。

于 2013-08-23T12:15:39.923 回答