开发者

Rails custom validation based on a regex?

I have the following regex that I use in my routes.rb for /type-in-something-here

# A-Z, a-z,开发者_开发知识库 0-9, _ in the middle but never starting or ending in a _
# At least 5, no more than 500 characters

In the routes this works well as:

match ':uuid' => 'room#show', :constraints => { :uuid => /[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?/ }

I want to have this also as a validation so invalid records aren't created. So I added the following to room.rb:

validates_format_of :uuid, :with => /[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?/i, :message => "Invalid! Alphanumerics only."

But this validates_format_of isn't working, and instead of adding an error it's allow the record to save.

Any ideas what's wrong?

Thanks


For validation purposes, remember to add the beginning and end of string markers \A and \Z:

validates_format_of :uuid, :with => /\A[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?\Z/i

Otherwise your regex will happily match any string that contains at least a letter or a digit. For some reason Rails implicitly adds the boundaries in the routes. (Probably because it embeds the regex inside a larger one to match the entire URL, with explicit checks for / and the end of the URL.)


using something like this

validates :uuid, :format => {:with => /[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?/i},
                 :message => "your message"

For more check this


validates :name, format: { with: /\A[a-zA-Z]+\z/,
message: "Only letters are allowed" }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜