rails正则表达式验证字符串转义

时间:2013-08-23 11:53:26

标签: ruby-on-rails ruby regex validation

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

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

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

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

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

1 个答案:

答案 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 \.'\-]+$/