Very Simple Regular Expressions (Starting with Numbers)
If you want to validate strings, text, or whatever it may be, validating with Regular Expression is an easy way to determine that the data is valid. Whether it’s an application or a web-site, you can validate users’ input to ensure it has met all requirements before continuing, or validate your own data.
^123$
This small example checks whether the data is simply ‘123′, anything else will fail. We use the ‘^’ symbol to show where the beginning of the data is, and the ‘$’ symbol to show where the end of the data is.
^[0-9]$
The example above will test the data to ensure it is a single number between 0 to 9. ‘0′, ‘1′, ‘2′, ‘3′, and ‘9′ are examples of data that will pass the above regular expression. ‘a’, ‘10′, and ‘ 1′ are all examples of data that will fail.
So what if we wanted 2 numbers?
^([0-9]|[0-9][0-9])$
The example above will match 0 to 9 or 00 to 99. The ‘|’ symbol simply specifies ‘or’ so in affect we have [0-9] for 0 to 9 | [0-9][0-9] for 00 to 99. Because we are using the ‘|’ symbol, we need to wrap brackets around our statement to show where the ‘or’ statement begins and where it ends.
Now lets work with time.
^(1[0-2]|(0?[1-9])):[0-5][0-9]$
12 hour format is pretty damn simple now that you know the basics. The first part ‘1[0-2]‘ means 1 followed by 0 to 2 (for example 10, 11, 12), ‘or’ ‘(0*[1-9])’ for 1 to 9 or 01 to 09. The ‘*’ means whatever character before it is optional, so the ‘0′ is optional but can only occur once if it was there.
So this will cover 1 to 9, 01 to 09, and 10, 11, 12. The ‘:’ symbol is exactly that, and the last two parts ‘[0-5][0-9]‘ means 00 to 59. ‘1:15′, ‘9:59′, and ‘12:39′ will all pass, but ‘00:38′, ‘13:32′, and ‘3:83′ will all fail.
I’m on a quest to make the ultimate regular expression for date and time, but there’s no use giving you the whole thing without first telling you how to get there. Keep an eye on my blog for more posts to come.
I must also note that the above and future examples are Perl-derivative regular expressions. Java, JavaScript, PCRE, Python, Ruby, Microsoft’s .NET Framework, and the W3C’s XML Schema all use regular expression syntax similar to Perl’s. Some languages and tools such as PHP support multiple regular expression flavors.
Resources
* RegExp – Mozilla Developer Center
* Regular Expression – Wikipedia




^([0-9]|[0-9][0-9])$ is syntactically correct but can get unruly, a better way to represent this would be:
^[0-9]{1,2}$
We are introducing a new syntax element; the curly braces. This allows us to specify certain numerical combinations of the previous expression. The simplest of these is {n} where n is the number of times the expression is applied. You can though use combinations like {n,n+1) to denote more than one numerical match condition.
So imagine you were looking for any number between 0 and 99999, you could represent it this way:
^([0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]|[0-9][0-9][0-9][0-9][0-9])$
or you could represent it this way:
^[0-9]{1,5}$
Which I think is more human readable.
It also offers certain flexibility.
Imagine you wanted numbers that contained leading zeroes between 00000 and 99999. You could then manipulate the expression:
^[0-9]{5}$
So when learning regular expressions, while simple syntax is good, a fuller understanding of the syntax can lead to SIMPLER regular expressions.