设计验证不断失败

时间:2013-05-21 08:57:54

标签: ruby-on-rails devise

将简单的Ruby on Rails应用程序作为需要用户注册的实践。

在“profile_name”字段

上实施正则表达式验证之前,一切正常

这是我的'用户'模型:

validates :profile_name, presence: true,
                           uniqueness: true,
                           format: {
                            with: /^a-zA-Z0-9_-$/,
                            message: 'Must be formatted correctly.'
                           }   

然而,简介名称'jon'只是拒绝传递。除了我的“用户”模型之外,这个错误可能来自哪里?

3 个答案:

答案 0 :(得分:1)

试试这样,工作正常

 validates :name, presence: true,
                               uniqueness: true,
                               format: {
                                with: /\A[a-zA-Z0-9_-$]+\z/,
                                message: 'Must be formatted correctly.'
                               } 

答案 1 :(得分:1)

我刚用'jon'在Rubular中测试了你的正则表达式。没有匹配。

我没有优化正则表达式编码器。但是仍然可以使用下面的正则表达式。

/^[a-zA-Z0-9_-]+$/

所以试试

 validates :name, presence: true,
                           uniqueness: true,
                           format: {
                            with: /^[a-zA-Z0-9_-]+$/,
                            message: 'Must be formatted correctly.'
                           } 

答案 2 :(得分:1)

您需要在范围周围添加括号,以便正则表达式匹配“任何范围”而不是“按顺序排列的所有范围”。在末尾添加一个+,使其能够匹配范围内的任何内容。 您还需要将行的开头和结尾更改为字符串的开头和结尾!

validates :profile_name, presence: true,
                         uniqueness: true,
                         format: {
                           with: /\A[a-zA-Z0-9_-]+\z/,
                           message: 'Must be formatted correctly.'
                         }

详细说明:

\A # Beginning of a string (not a line!)
\z # End of a string
[...] # match anything within the brackets
+ # match the preceding element one or more times

用于生成和检查正则表达式的真正有用的资源:http://www.myezapp.com/apps/dev/regexp/show.ws