将简单的Ruby on Rails应用程序作为需要用户注册的实践。
在“profile_name”字段
上实施正则表达式验证之前,一切正常这是我的'用户'模型:
validates :profile_name, presence: true,
uniqueness: true,
format: {
with: /^a-zA-Z0-9_-$/,
message: 'Must be formatted correctly.'
}
然而,简介名称'jon'只是拒绝传递。除了我的“用户”模型之外,这个错误可能来自哪里?
答案 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