Ashley Bye
Ashley Bye

Reputation: 1750

Rails 3: validate REGEX fails if no value input

I am using the following REGEX

VALID_WEBSITE_REGEX = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?(\/.*)?$/ix

to validate a website entry with this rule:

validates :website, length: { maximum: 150 }, format: { with: VALID_WEBSITE_REGEX }

(The 150 is arbitrary).

However, when I save / update the form I get a validation error "website is invalid". How do I ensure that the 'format' section of the validation rule is processed only if there is content to process?

Upvotes: 2

Views: 737

Answers (2)

Fivell
Fivell

Reputation: 11929

You can use allow_blank option for validation

:allow_blank => true 

This option will let validation pass if the attribute’s value is blank?, like nil or an empty string for example. read more: http://guides.rubyonrails.org/active_record_validations_callbacks.html#allow_blank

Upvotes: 4

Andrew Cheong
Andrew Cheong

Reputation: 30273

Enclose the entire thing with the ? operator, e.g.

VALID_WEBSITE_REGEX = /^((http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?(\/.*)?)?$/ix

If you want to allow whitespace too, then add \s* on each end, e.g.

VALID_WEBSITE_REGEX = /^\s*((http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?(\/.*)?)?\s*$/ix

Upvotes: 0

Related Questions