# Validates\_format\_of with condition

**URL:** <https://www.ruby-forum.com/t/validates-format-of-with-condition/187077>\
**Category:** Rails\
**Created:** [April 16, 2010, 4:42pm UTC](https://www.ruby-forum.com/t/validates-format-of-with-condition/187077 "2010-04-16T16:42:39Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![gandhi-tush](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/5daacb/32.png) [@gandhi-tush](https://www.ruby-forum.com/u/gandhi-tush)\
**Post date:** [April 16, 2010, 4:42pm UTC](https://www.ruby-forum.com/t/validates-format-of-with-condition/187077/1 "2010-04-16T16:42:39Z")

</div>

Hi,  
I am trying to validate the email format by using “validates\_format\_of”.  
I have written a code like this:-  
"validates\_format\_of :email,  
:with=\>/^[0-9a-zA-Z\_][\w.-]_[a-zA-Z0-9\_]@[a-zA-Z0-9][\w.-]_[a-zA-Z0-9].[a-zA-Z][a-zA-Z.]\*[a-zA-Z]$/,  
:message =\> “is not valid” "

It is working fine, but in my application email id is not manadatory.  
So how should add the condition in this validator so that it will  
validate the email only when the email address is present.

Can anyone help me out?

Thanks,  
Tushar

---

<div class="post-metadata">

**Author:** ![gandhi-tush](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/5daacb/32.png) [@gandhi-tush](https://www.ruby-forum.com/u/gandhi-tush)\
**Post date:** [April 16, 2010, 5:29pm UTC](https://www.ruby-forum.com/t/validates-format-of-with-condition/187077/2 "2010-04-16T17:29:50Z")

</div>

Tushar G. wrote:

> Hi,  
> I am trying to validate the email format by using “validates\_format\_of”.  
> I have written a code like this:-  
> "validates\_format\_of :email,  
> :with=\>/^[0-9a-zA-Z\_][\w.-]_[a-zA-Z0-9\_]@[a-zA-Z0-9][\w.-]_[a-zA-Z0-9].[a-zA-Z][a-zA-Z.]\*[a-zA-Z]$/,  
> :message =\> “is not valid” "
> 
> It is working fine, but in my application email id is not manadatory.  
> So how should add the condition in this validator so that it will  
> validate the email only when the email address is present.
> 
> Can anyone help me out?
> 
> Thanks,  
> Tushar

Have you considered :unless

---

<div class="post-metadata">

**Author:** ![gandhi-tush](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/5daacb/32.png) [@gandhi-tush](https://www.ruby-forum.com/u/gandhi-tush)\
**Post date:** [April 17, 2010, 11:25am UTC](https://www.ruby-forum.com/t/validates-format-of-with-condition/187077/3 "2010-04-17T11:25:29Z")

</div>

Hi,  
Use allow\_blank =\> true

---

<div class="post-metadata">

**Author:** ![gandhi-tush](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/5daacb/32.png) [@gandhi-tush](https://www.ruby-forum.com/u/gandhi-tush)\
**Post date:** [April 16, 2010, 7:19pm UTC](https://www.ruby-forum.com/t/validates-format-of-with-condition/187077/4 "2010-04-16T19:19:55Z")

</div>

:allow\_nil =\> true

---

<div class="post-metadata">

**Author:** ![gandhi-tush](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/5daacb/32.png) [@gandhi-tush](https://www.ruby-forum.com/u/gandhi-tush)\
**Post date:** [April 17, 2010, 8:14pm UTC](https://www.ruby-forum.com/t/validates-format-of-with-condition/187077/5 "2010-04-17T20:14:11Z")

</div>

validates\_format\_of :email,  
:with=\>/^[0-9a-zA-Z\_][\w.-]_[a-zA-Z0-9\_]@[a-zA-Z0-9][\w.-]_[a-zA-  
Z0-9].[a-zA-Z][a-zA-Z.]\*[a-zA-Z]$/,  
:message =\> “is not valid”,  
:unless =\> Proc.new { |your\_model\_name\_or\_any\_variable\_name\_you\_want|  
your\_model\_name\_or\_any\_variable\_name\_you\_want.email.blank?}

So, supposing your model is a User:

validates\_format\_of :email,  
:with=\>/^[0-9a-zA-Z\_][\w.-]_[a-zA-Z0-9\_]@[a-zA-Z0-9][\w.-]_[a-zA-  
Z0-9].[a-zA-Z][a-zA-Z.]\*[a-zA-Z]$/,  
:message =\> “is not valid”,  
:unless =\> Proc.new {|user| user.email.blank?}
