J'installe cet exemple Perl extrait pour valider pendant des mois dans une date:Comment puis-je utiliser une expression régulière pour valider la saisie du mois?
Certains scénarios que 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");
Quand je lance cela, il filtres correctement 01-12 mais quand je change la regex:
$month = "(0?[1-9]|1[012])";
alors l'expression rationnelle permet 13, 14, etc ... ce GIV es?
(0 [1-0] | 1 [012]?), Plage non valide [] "1-0" dans regex. faute de frappe? –
Je suis d'accord avec la réponse de Greg Hewgill mais la raison pour laquelle vous n'obtenez pas ce que vous voulez, c'est parce que votre expression régulière manque de métacaractères pour indiquer à l'expression rationnelle de correspondre au début et à la fin de votre chaîne (c.-à-d. En l'état, il correspond à n'importe quelle partie de votre chaîne. – seth