How can I use a regular expression to validate month input?

perl, regex

Solution

If you really like to use regex, you need to put ^ and $, like

`"^(0?[1-9]|1[012])$"`

it will not match 13, 14 ....

Problem

I am setting up this example Perl snippet to validate for months in a date: Some scenarios I want to accept are: MM M ``` #!/usr/bin/perl use strict; use warnings; my $pattern; my $month = "(0[1-9]|1[012])"; my $day = "(0[1-9]|[12]\d|3[01])"; system("cls"); do { print "Enter in a month: "; chomp($pattern = <STDIN>); # We only want to print if the pattern matches print "Pattern matches\n" if ($pattern =~ /$month/); } while ($pattern ne "Q"); ``` When I run this, it correctly filters from 01-12 but when I change the regex to: ``` $month = "(0?[1-9]|1[012])"; ``` then the regex allows 13, 14, etc... what gives?

Original source