我的模型中有一个名称属性,由
验证validates :name ,format:{with: /^[\p{L} \.'\-]+$/ , message: "invalid name" }
创建模型对象时发现以下语法错误
SyntaxError (basic_info.rb:8: invalid property name {L}: /^[\p{L} \.'\-]+$/
显然Ruby正在尝试评估未定义的正则表达式中的{L}
。在正则表达式中插入转义字符也会使其无效。
答案 0 :(得分:0)
编辑根据this post,它与编码有关。前Ruby 2.0.0,ruby脚本的默认编码不是Unicode,因此在使用unicode字符属性regexp模式(例如\p{L}
时)会导致问题。)
您需要将魔术# 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 \.'\-]+$/
。