[regexp] minuscules avec tirets

minuscules avec tirets [regexp] - PHP - Programmation

Marsh Posté le 26-06-2007 à 02:47:34    

Hello,

 

Je bloque sur une vérifiaction toute simple en regexp :
je voudrais savoir si un chaine n'est composée que de lettres simples minuscules et de tirets, mais je ne veux pas que cette chaine commence ni ne finisse par un tiret.

 

Pour le moment j'ai réussi à faire ça :

Code :
  1. ^[a-z]([-][a-z])*
 

Ca fonctionne presque mais ça laisse passer des strings avec des chiffres comme "bonjour22" et je ne comprend pas pourquoi.

Message cité 1 fois
Message édité par Big-Foot le 26-06-2007 à 02:50:40
Reply

Marsh Posté le 26-06-2007 à 02:47:34   

Reply

Marsh Posté le 26-06-2007 à 02:51:43    

Salut,
 
Il faut que tu échappes ton '-', sinon, il est compté comme déclarant un intervalle (d'ailleurs, tu peux regrouper les 2 expressions entre crochets). Il faut aussi que tu ajoutes '$' à la fin de ta regex, sinon, tu laisses justement passer ton '22' après 'bonjour'.

Reply

Marsh Posté le 26-06-2007 à 03:05:26    

héhé.. une réponse en 10min à 3h du matin c'est vraiment pas mal.
 
J'ai ajouté le "$" et ça m'a l'air de jouer, ça donne :
 

Code :
  1. ^[a-z]([-a-z])*$


 
Merci à toi :)
 
Par contre je ne crois pas qu'il faille échapper le "-" :

Citation :

Pour permettre sa lecture en tant que caractère "tiret" il convient de le placer en début de la classe comme ceci [-....]


Source : http://www.expreg.com/symbole.php
 

Reply

Marsh Posté le 26-06-2007 à 09:35:29    

2 choses:

  • la regex ci dessus est pas bonne, elle tolère les tirets en fin de mots. ça se complique un peu si tu dois également accepter les mots de 1 lettre. Mais sinon rajoute juste un [a-z] avant le crochet.


  • le tiret peut(doit) être backslashé dans certains conditions, par exemple il faut différencier:


[a-z] # tous les caractères de a à z
[a\-z] # les caractères a, - et z

Reply

Marsh Posté le 26-06-2007 à 10:15:21    

Big-Foot a écrit :

Hello,

 

Je bloque sur une vérifiaction toute simple en regexp :
je voudrais savoir si un chaine n'est composée que de lettres simples minuscules et de tirets, mais je ne veux pas que cette chaine commence ni ne finisse par un tiret.

 

Pour le moment j'ai réussi à faire ça :

Code :
  1. ^[a-z]([-][a-z])*
 

Ca fonctionne presque mais ça laisse passer des strings avec des chiffres comme "bonjour22" et je ne comprend pas pourquoi.


^[a-z]+(-[a-z]+)*$

Message cité 1 fois
Message édité par masklinn le 26-06-2007 à 10:15:51

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-06-2007 à 23:28:06    

masklinn a écrit :

^[a-z]+(-[a-z]+)*$



 
Ah ouais c'est mieux ça :)
En fait je dois aussi accepter les "_", alors ça donne cela si je ne me trompe :

^[a-z]+([-_][a-z]+)*$

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed