Voy a configurar este ejemplo Perl fragmento para validar durante meses en una fecha:¿Cómo puedo usar una expresión regular para validar la entrada del mes?
Algunos escenarios que desea aceptar son:
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");
Cuando ejecuto esto, filtra correctamente de 01-12, pero cuando cambio la expresión regular a:
$month = "(0?[1-9]|1[012])";
entonces la expresión regular permite a 13, 14, etc ... lo que GIV es?
(0 [1-0] | 1 [012]?), No válida [] gama "1-0" en expresiones regulares. ¿error de tipografía? –
Estoy de acuerdo con la respuesta de Greg Hewgill, pero la razón por la que no obtiene lo que desea es porque a su expresión regular le faltan metacaracteres para decirle a la expresión regular que coincida con el principio y el final de la cadena (es decir^y $). Tal como está, se corresponde con cualquier parte de tu cadena. – seth