Comment puis-je utiliser une expression régulière pour valider la saisie du mois?

Je suis la configuration de cet exemple Perl extrait de les valider par mois dans une date:

Certains scénarios, je veux accepter sont:

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");

Lorsque je l'exécute, il correctement les filtres de 01-12 mais lorsque je change la regex:

$month = "(0?[1-9]|1[012])";

puis la regex permet 13, 14, etc... ce qui donne?

source d'informationauteur coson