Regex

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

22 févr. 2012, 03:01

Bonjour,

J'ai toujours été allergique aux regex,
mais là, je crains de ne pouvoir m'en passer. :cry:

Je souhaite n’accepter que les chaines de caractère
qui valident les critères suivants :
- de 1 à 4 caractères
- le premier caractère est un chiffre
- peut contenir un seul caractère non numérique (facultatif) : le point (.), la virgule (,) ou la lettre h (h).

Vous l'aurez compris, je veux tester des durées exprimées en heures.
exemples valides : 1h30 ou 1,50 ou 1,5 ou 2h ou 2 ou 2,00 ou 2h00

J'ai construit la regex suivante, mais c'est pas encore tout à fait ça.

Code : Tout sélectionner

[0-9]+[h.,]?[0-9]*{1,4}
Merci pour votre aide,

ViPHP
ViPHP | 4039 Messages

22 févr. 2012, 10:04

Ceci ne convient pas ?

Code : Tout sélectionner

[0-9]+[h.:,]?[0-9]*
Il semble répondre à tous les cas proposés...

J'ai rajouté le double point parce que je sentais que le moment était venu de le faire. Et que 6:55 c'est l'heure de mon réveil.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 févr. 2012, 10:14

yop,

j'ai testé ça ^(\d){1,2}[h.,:]?((\d){1,2})?$

ça match
1h30
1,50
1,5
2h
2
2,00
2h00
15h30

a voir si cela peux te convenir
arf berzemus, pas mal, on juste le même soucis : un chiffre a 4 digits est valide :/
un soucis dans les alternatives ^^

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 4039 Messages

22 févr. 2012, 12:16

4 digits doit être invalide ? Ca n'a pas l'air de coller avec les critères... si les 2 derniers chiffres DOIVENT être précédés d'un caractère non numérique, on peut toujours essayer ceci:

Code : Tout sélectionner

^[0-9]{1,2}([h.,:]?|[h.,:][0-9]{1,2})$
Après on peut y ajouter des petites choses autour pour filtrer un peu plus, mais en gros ça y est
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 févr. 2012, 18:25

Justement non pas valide le 4123 or dans mes test Si :/

Ce qui, quand on y réfléchis, est normal, on match les deux premiers chiffres, on est dans le cas ou aucun des séparateur n'est présent et on match sur les deux derniers chiffres.

J'ai mis deux chiffres pour permettre 12h13 ou simplement 02h04 ^^

Doit y avoir moyen de faire avec les assertions je pense mais ça dépassée largement mes compétences la :/

@+
Il en faut peu pour être heureux ......