我的模型中有一个名称属性,由
validates :name ,format:{with: /^[\p{L} \.'\-]+$/ , message: "invalid name" }
创建模型对象时发现以下语法错误
SyntaxError (basic_info.rb:8: invalid property name {L}: /^[\p{L} \.'\-]+$/
显然 Ruby 正在尝试{L}
在未定义的正则表达式中进行评估。在正则表达式中插入转义字符也会使其无效。
我的模型中有一个名称属性,由
validates :name ,format:{with: /^[\p{L} \.'\-]+$/ , message: "invalid name" }
创建模型对象时发现以下语法错误
SyntaxError (basic_info.rb:8: invalid property name {L}: /^[\p{L} \.'\-]+$/
显然 Ruby 正在尝试{L}
在未定义的正则表达式中进行评估。在正则表达式中插入转义字符也会使其无效。
编辑:根据这篇文章,它与编码有关。\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 \.'\-]+$/
改用。