Regular Expressions

validates_format_of :closing_date, :with => /^\d\d\-\d\d\-\d\d\d\d$/, :message => "is not correct format"

Does this seem correct or is there a better way to do this? Basically, I have a closing_date column in my database which is set as a date field. On the front end form, I've used a text box for the user to enter the date. I've entered the data exactly as the regular expression above dictates but I can't seem to make it pass that instance method :confused:

Please help.

by the time rails validates the record it has already turned it into a date.

Fred

Frederick Cheung wrote:

by the time rails validates the record it has already turned it into a date.

Fred

Thanks for your swift response. What exactly does this mean for my validation, though?

validates_presence_of would probably suffice. If the user entered an non-parseable value, the closing_date field will be nil.

try it and see :slight_smile:

Michael Pavling wrote:

validate :method_for_date

def method_for_date yours code format specifications end

try something like this may be help full

Pale Horse wrote:

Michael Pavling wrote:

Frederick Cheung wrote:

by the time rails validates the record it has already turned it into a date.

Thanks for your swift response. What exactly does this mean for my validation, though?

validates_presence_of would probably suffice. If the user entered an non-parseable value, the closing_date field will be nil.

try it and see :slight_smile:

I just fail to see why my method wouldn't work, but I will try - thank you.

Sorry, I misread this. I do not want to check for the presence of the closing date, I just want to check the format of it against this: "30-02-2010".

Michael Pavling wrote:

try it and see :slight_smile:

I just fail to see why my method wouldn't work, but I will try - thank you.

You're doing a regex evaluation on a Date (or DateTime) object... so it fails. Try these in IRB:

Date.today =~ /10/

Date.today.to_s =~ /10/

By definition, the format of the Date converted to a string is defined by the to_s method, so it's a tautology to change it to a string and check its format! By all means check that it's in the future or past, or within whatever range you want... but it's a DATE - so do date operations on it, not string operations.

If you want to check what the user *typed* you need to get to the controller and do some validation on params[:closing_date] (or pass that value into an attr_writer in your model, and do model validations on that parameter...)