# Question about regex and date formatting

**URL:** <https://www.ruby-forum.com/t/question-about-regex-and-date-formatting/171394>\
**Category:** Ruby\
**Created:** [July 1, 2009, 6:20pm UTC](https://www.ruby-forum.com/t/question-about-regex-and-date-formatting/171394 "2009-07-01T18:20:08Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![elricstorm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/da6949/32.png) [@elricstorm](https://www.ruby-forum.com/u/elricstorm)\
**Post date:** [July 1, 2009, 6:20pm UTC](https://www.ruby-forum.com/t/question-about-regex-and-date-formatting/171394/1 "2009-07-01T18:20:08Z")

</div>

I’m trying to check whether yyyy-dd-mm in a string or date is true.

I’ve tried:

date = “2009-06-01”  
date =~ /^\d{4}-\d{2}-\d{2}$/

returns =\> 0

It should return true. What am I missing here?

---

<div class="post-metadata">

**Author:** ![elricstorm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/da6949/32.png) [@elricstorm](https://www.ruby-forum.com/u/elricstorm)\
**Post date:** [July 1, 2009, 7:07pm UTC](https://www.ruby-forum.com/t/question-about-regex-and-date-formatting/171394/2 "2009-07-01T19:07:28Z")

</div>

Ã„lphÃ¤ BlÃ¼Ã« wrote:

> I’m trying to check whether yyyy-dd-mm in a string or date is true.
> 
> I’ve tried:
> 
> date = “2009-06-01”  
> date =~ /^\d{4}-\d{2}-\d{2}$/
> 
> returns =\> 0
> 
> It should return true. What am I missing here?

That’s the correct response. =~ return the starting position of the  
string that was matched. If there is no match it returns nil.

– gw

---

<div class="post-metadata">

**Author:** ![elricstorm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/da6949/32.png) [@elricstorm](https://www.ruby-forum.com/u/elricstorm)\
**Post date:** [July 1, 2009, 7:37pm UTC](https://www.ruby-forum.com/t/question-about-regex-and-date-formatting/171394/3 "2009-07-01T19:37:22Z")

</div>

On Wed, Jul 1, 2009 at 6:21 PM, Älphä Blüë[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> date = “2009-06-01”  
> date =~ /^\d{4}-\d{2}-\d{2}$/
> 
> returns =\> 0

Remember that 0 in Ruby is not false, only ‘nil’ and false are. 0 is  
the index of where in your string your match starts. Your RegEx is ok:

> > m=/\d{4}-\d{2}-\d{2}/.match(date)  
> > =\> #MatchData:0x573348  
> > pp m  
> > #\<MatchData “2009-06-01”\>

Also this little change should make it obvious what happens:

> > date = “blablabla2009-06-01”  
> > =\> “blablabla2009-06-01”  
> > date =~ /\d{4}-\d{2}-\d{2}$/  
> > =\> 9

HTH,  
Michael

–  
Il pinguino ha rubato il mio lanciafiamme.

Blog: [http://citizen428.net/](http://citizen428.net/)  
Twitter: [http://twitter.com/citizen428](http://twitter.com/citizen428)

---

<div class="post-metadata">

**Author:** ![elricstorm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/da6949/32.png) [@elricstorm](https://www.ruby-forum.com/u/elricstorm)\
**Post date:** [July 1, 2009, 7:50pm UTC](https://www.ruby-forum.com/t/question-about-regex-and-date-formatting/171394/4 "2009-07-01T19:50:28Z")

</div>

Ah I didn’t realize that. I thought 0 meant false. I appreciate the  
answer and the tips…
