42

I would like to validate the format of a form value, allowing an empty value or requiring a specific format.

To validate a value against a format, this works fine:

validates :application_bundle_identifier, :format => {
  :with => /^[a-zA-Z0-9.-]+$/,
  :message => "A bundle identifier should contain only alphanumeric (A-Z,a-z,0-9), hyphen (-), and period (.) characters."
}

Now, I would like to allow users to not enter the value at all. In this case, I could tweak the regexp to ^[a-zA-Z0-9.-]*$, but this does not seem a very good Rails-way. Depending of the format, it might be not possible, or at least less clear.

What is the best practice in this case?

Flip
  • 6,233
  • 7
  • 46
  • 75
Guillaume
  • 21,685
  • 6
  • 63
  • 95

2 Answers2

89

You can use the option allow_blank: true to skip the validation when the attribute is blank/empty/nil.

https://guides.rubyonrails.org/active_record_validations.html#allow-blank

Gino
  • 1,043
  • 16
  • 27
Jordan Running
  • 102,619
  • 17
  • 182
  • 182
-3

Add unless nil? || blank?, which should skip the validation if it's blank (empty) or nil, I believe.

See the last code example on this page.

jefflunt
  • 33,527
  • 7
  • 88
  • 126