J'essaie de faire correspondre le modèle de date en utilisant case
commande mais ça ne marche pas. Quelqu'un peut-il m'aider ?
Entrée :01/05/1900
ou 5/6/1900
Instruction de cas utilisée :
ptn="[0-9]|[0-9][0-9]/[0-9]|[0-9][0-9]/[0-9][0-9]|[0-9][0-9][0-9][0-9]"
case "$dt" in
$ptn ) echo "valid pattern" ;;
*) echo "invalid"
esac
Mais le modèle utilisé dans l'instruction case n'est pas évalué pour les 2 entrées de date ci-dessus.
Réponse acceptée :
Essaye ça. case
ne comprend que les globs, donc la gestion d'une expression rationnelle n'est pas simple. Le =~
L'opérateur propose cependant quelques solutions ici.
#!/bin/bash
INP="01/05/1900"
ptn="^([0-9]|[0-9][0-9])/([0-9]|[0-9][0-9])/([0-9][0-9]|[0-9][0-9][0-9][0-9])$"
if [[ $INP =~ $ptn ]] ; then
echo valid pattern
else
echo invalid
fi
Si vous souhaitez réduire la taille de l'expression régulière, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$
fonctionne aussi bien.