Incohérence du résultat d'une RegExp sur deux mêmes tests!

Résolu
barbe91 Messages postés 20 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 24 novembre 2011 - 24 nov. 2011 à 15:07
barbe91 Messages postés 20 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 24 novembre 2011 - 24 nov. 2011 à 16:07
Bonjour à toute la communauté,

Je ne sais absolument pas dans quel thème précis raccorder mon message. J'ai choisi donc "CSS/Général", pardonnez-moi si je me suis complètement planté.

J'ai un problème qui me dépasse en ce moment, je suis tout ratatiné tellement il est haut!!!

Problème : Un utilisateur peut rentrer une heure exclusivement dans ce format=> hh:mm ou h:mm si l'heure est < 10h
Pour les minutes, il n'y a que la demi-heure d'acceptée. Donc c'est soit 00, soit 30.

Donc:
-> 17:30 et 17:00 sont acceptés et pas 17 (ou 17:) si on veut juste 17 heures.
->09:00 et 9:00 sont acceptés.

Voici mon expression régulière pour tester le format de l'heure :

new RegExp("^[0-2]{0,1}[0-9]\:[03][0]$", "g");

Cette expression est pour moi bonne.
Quand je fais un alert(myReg.test(time)) avec time = 10:30, ça m'affiche bien "true".
Par contre quand je fais juste après la condition suivante (toujours avec 10:30) :

if(!myReg.test(time)) alert("msg");

le message est affiché, comme si le test renvoyait "false" alors qu'il renvoyait "true" dans le "alert()".

J'ai cherché du côté du buffer, j'ai aussi vidé le cache du navigateur, mais rien n'y fait.

Je me tourne donc vers vous et votre expérience, pour m'aider à trouver ce qui cloche là dedans.

Merci pour votre attention.

Barbe91

1 réponse

barbe91 Messages postés 20 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 24 novembre 2011
24 nov. 2011 à 16:07
Je vais préciser quelque chose, l'utilisateur doit rentrer une heure de début et de fin.

J'utilise alors la même RegExp pour tester les deux saisies.

C'est là que ça bug ==> le fait d'utiliser la même RegExp pour les deux tests.

J'ai finalement écrits deux RegExp, qui ont le même langage de vérification :

var reg_timeFormat1 = new RegExp("^[0-2]{0,1}[0-9]\:[03][0]$", "g"); (pour tester la date de début)

var reg_timeFormat2 = new RegExp("^[0-2]{0,1}[0-9]\:[03][0]$", "g"); (pour tester la date de fin)

Et ça marche! Mais je trouve cela particulièrement bête de déclarer deux fois la même RegExp. Qu'en pensez-vous?

Dois-je marquer le sujet comme résolu ou y a t-il meilleure(s) solution(s)?
3