Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Debutante] Variable confirme a une date ?

15 réponses
Avatar
Mag
Bonjour,

J'ai une variable de ce type:

$ladate = '2010-03-21'

je souhaite faire un if qui ce declenche si la synthaxe de la variable
n'est pas la bonne, mais je ne sais pas faire. Quelqu'un pourrait m'aider ?


En gros, de temps en temps la variable est vide, la pas de probleme
un simple if($ladate eq "") la declenche, mais quand il y a par exemple
$ladate = 'uneerreur'
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre

merci d'avance
mag

10 réponses

1 2
Avatar
espie
In article <4ba600d6$0$22011$,
Mag wrote:




Bonjour,

J'ai une variable de ce type:

$ladate = '2010-03-21'

je souhaite faire un if qui ce declenche si la synthaxe de la variable
n'est pas la bonne, mais je ne sais pas faire. Quelqu'un pourrait m'aider ?


En gros, de temps en temps la variable est vide, la pas de probleme
un simple if($ladate eq "") la declenche, mais quand il y a par exemple
$ladate = 'uneerreur'
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre

merci d'avance
mag




$ladate =~ m/^d{4}-d{2}-d{2}$/

par exemple.

(man perlretut)
Avatar
Stephane CHAZELAS
2010-03-21, 11:30(+00), Marc Espie:
[...]
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre




[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/


[...]

$ladate =~ m/^d{4}-d{2}-d{2}$/

devrait suffire. Attention toutefois que ca valide
"2009-01-01n". On preferera peut-etre:

$ladate =~ /^d{4}-d{2}-d{2}z/

--
Stéphane
Avatar
espie
In article ,
Stephane CHAZELAS wrote:
2010-03-21, 11:30(+00), Marc Espie:
[...]
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre




[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/


[...]

$ladate =~ m/^d{4}-d{2}-d{2}$/

devrait suffire. Attention toutefois que ca valide
"2009-01-01n". On preferera peut-etre:



Pour une debutante, je prefere l'application des regles universelles.
Pas une lettre -> pour le sens normal.

D'ailleurs, ton truc marche aujourd'hui, mais sans garantie pour le futur.
Si un jour on decide que - a un sens particulier, ca cassera (d'accord, c'est
peu probable, mais perso, ca ne coute rien de ne pas prendre le risque, donc
je le fais).

Je ne vois pas trop l'interet de se poser la question du retour a la ligne
a la fin... perl fait a peu pres tout pour qu'on s'en foute, donc sauf mention
explicite de problemes lies a ca, je fais comme perl et j'ignore...
Avatar
Paul Gaborit
À (at) Sun, 21 Mar 2010 14:43:55 +0000 (UTC),
(Marc Espie) écrivait (wrote):

Si un jour on decide que - a un sens particulier, ca cassera
(d'accord, c'est peu probable, mais perso, ca ne coute rien de ne pas
prendre le risque, donc je le fais).



En fait c'est très probable puisque c'est déjà comme ça en Perl 6 : pour
qu'un symbole soit compris tel quel dans une expression régulière, il
*doit* être préfixé par un ''.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
xavier
Mag wrote:

je souhaite faire un if qui ce declenche si la synthaxe de la variable
n'est pas la bonne, mais je ne sais pas faire. Quelqu'un pourrait m'aider ?



Je pense que le module Date::Manip peut vous aider:
<http://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.pod>

--
XAv
Disponible au 01/06/2010 - peut-être...peut-être pas...
<http://www.xavierhumbert.net/perso/CV2.html>
Avatar
espie
In article ,
Paul Gaborit <Paul.Gaborit+ wrote:

À (at) Sun, 21 Mar 2010 14:43:55 +0000 (UTC),
(Marc Espie) écrivait (wrote):

Si un jour on decide que - a un sens particulier, ca cassera
(d'accord, c'est peu probable, mais perso, ca ne coute rien de ne pas
prendre le risque, donc je le fais).



En fait c'est très probable puisque c'est déjà comme ça en Perl 6 : pour
qu'un symbole soit compris tel quel dans une expression régulière, il
*doit* être préfixé par un ''.



ca me laisse quand meme dubitatif... deja, j'ai des doutes sur le fait
que perl6 existe un jour comme autre chose que labo experimental.

ensuite, je soupconne que le parser de syntaxe concrete perl5 fera la
conversion tout seul.

mais bon, au rythme ou les trucs sympa de perl6 debarquent dans perl5, je
pense qu'on en a encore pour 10 a 15 ans avant qu'on ait 'reellement' du
perl6 en usage courant.

--
Marc, qui a adopte say, //=, et va sans doute passer a given et static
sous peu....
Avatar
Mag
Le 21/03/2010 15:19, Stephane CHAZELAS a écrit :
2010-03-21, 11:30(+00), Marc Espie:
[...]
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre




[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/


[...]

$ladate =~ m/^d{4}-d{2}-d{2}$/

devrait suffire. Attention toutefois que ca valide
"2009-01-01n". On preferera peut-etre:

$ladate =~ /^d{4}-d{2}-d{2}z/




merci a tous pour vos reponses
Avatar
Mag
Le 21/03/2010 15:19, Stephane CHAZELAS a écrit :
2010-03-21, 11:30(+00), Marc Espie:
[...]
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre




[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/


[...]

$ladate =~ m/^d{4}-d{2}-d{2}$/

devrait suffire. Attention toutefois que ca valide
"2009-01-01n". On preferera peut-etre:

$ladate =~ /^d{4}-d{2}-d{2}z/





heu juste une derneire question, j'integre cela comment hihi ?

car si je fais un:
if ($ladate =~ m/^d{4}-d{2}-d{2}$/) { print ("Date pas conformen");}

il va m'imprimer le texte partout ou la date est conforme non ? ou alors
le "m" retourne un vrai quand la condition n'est pas rempli ?

merci
mag
Avatar
espie
In article <4ba67321$0$6273$,
Mag wrote:
Le 21/03/2010 15:19, Stephane CHAZELAS a écrit :
2010-03-21, 11:30(+00), Marc Espie:
[...]
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre




[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/


[...]

$ladate =~ m/^d{4}-d{2}-d{2}$/

devrait suffire. Attention toutefois que ca valide
"2009-01-01n". On preferera peut-etre:

$ladate =~ /^d{4}-d{2}-d{2}z/





heu juste une derneire question, j'integre cela comment hihi ?

car si je fais un:
if ($ladate =~ m/^d{4}-d{2}-d{2}$/) { print ("Date pas conformen");}

il va m'imprimer le texte partout ou la date est conforme non ? ou alors
le "m" retourne un vrai quand la condition n'est pas rempli ?



Ben tu rajoutes une negation, je vois au moins 4 facons de faire, a vu de pif.

if (!($ladate =~ m/^d{4}-d{2}-d{2}$/)) { print ("Date pas conformen");}

unless ($ladate =~ m/^d{4}-d{2}-d{2}$/) { print ("Date pas conformen");}

if ($ladate !~ m/^d{4}-d{2}-d{2}$/) { print ("Date pas conformen");}

$ladate =~ m/^d{4}-d{2}-d{2}$/ or print "Date pas conformen";
Avatar
Stephane CHAZELAS
2010-03-21, 14:43(+00), Marc Espie:
In article ,
Stephane CHAZELAS wrote:
2010-03-21, 11:30(+00), Marc Espie:
[...]
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre




[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/


[...]

$ladate =~ m/^d{4}-d{2}-d{2}$/

devrait suffire. Attention toutefois que ca valide
"2009-01-01n". On preferera peut-etre:



Pour une debutante, je prefere l'application des regles universelles.
Pas une lettre -> pour le sens normal.

D'ailleurs, ton truc marche aujourd'hui, mais sans garantie pour le futur.
Si un jour on decide que - a un sens particulier, ca cassera (d'accord, c'est
peu probable, mais perso, ca ne coute rien de ne pas prendre le risque, donc
je le fais).



Je ne sais pas pour perl, mais en general, c'est le contraire.
Quand une nouvelle version introduit un nouvel operateur, soit
elle casse la backward compatibility, et alors on s'en fout on
ne peut rien y faire, , soit elle fera en sorte de preserver la
backward compatibility en introduisant des operateurs qui ne
clasheront pas avec ce qui etait utilisé avant.

C'est le cas des { dans les BRE par exemple. Les scripts
d'avant l'introduction n'avaient aucune raison d'utiliser {
puisque { n'etait pas speciaux, donc c'est safe d'introduire {.

Dans les RE standard, d'ailleurs la norme dit que le
comportement des "" suivi par un x symbol ou x n'est pas
defini dans la norme est "unspecified" ce qui permet a des
implementations de le supporter en tant qu'extension a la norme.

Si perl 6 introduit "-" comme operateur de regexp, alors il
casse sans equivoque la backward compatibility.

Je ne vois pas trop l'interet de se poser la question du retour a la ligne
a la fin... perl fait a peu pres tout pour qu'on s'en foute, donc sauf mention
explicite de problemes lies a ca, je fais comme perl et j'ignore...



Je ne vois pas pourquoi un newline poserait moins de probleme
qu'un autre caractere. En general, c'est plutot le contraire.
(voir l'exemple des CGI qui envoient des mails par un pipe a
sendmail et pour qui l'introduction d'un newline dans les
headers signifie un nouveau header (comme Bcc, From, Reply-To),
j'ai deja vu le cas d'un "Subject: $q->param("subject")"
exploité pour envoyer des spams (en passant "xxxnTo: ..." comme
"subject")).

--
Stéphane
1 2