Modèle REGEXP

Modèle REGEXP - HTML/CSS - Programmation

Marsh Posté le 15-12-2007 à 13:08:42    

Bonjour !
Je me suis toujours demandé qui a inventé les expressions régulières. Elles sont très pratiques, mais la syntaxe des modèles ou patterns me semblent être très difficiles. C'est pourquoi je vous demande de l'aide.
Je souhaite en fait vérifier (via la méthode test() de l'objet RegExp) si la saisie de mots-clefs dans une zone de texte html est conforme aux règles suivantes :
 
- on peut saisir un ou plusieurs mots-clefs, ex.: "aaa" ou "aaa, bbb, ccc".  
- pas de virgules dans un et un seul mot-clef.
- pas d'espace(s) avant la virgule.
- l'espace est autorisé dans chaque mot-clef, ex.: "aa aa, bb, cc" .
- l'espace est obligatoire après la virgule si on saisit plusieurs mots-clefs.
- pas de chiffres dans les mots-clefs.
- un mot-clef doit être d'une longueur de 2 caractères au minimum.  
  Les mots-clefs à une lettre ne sont pas alors acceptés.
 
Bref, l'exemple idéal (respectant ces règles !) serait :  
 
"aa, bbbb, ccc cccc, ddd" pour plusieurs mots-clefs.
 
Merci d'avance pour vos réponses ! Et bonne journée !
 
Malinski2006
 :hello:  

Reply

Marsh Posté le 15-12-2007 à 13:08:42   

Reply

Marsh Posté le 15-12-2007 à 13:28:44    

Je répond sur un autre point que les regexp :
 
Evite à tout prix les règles ultra-relous genre "pas d'espace avant la virgule." C'est extrêmement trivial de gérer ce cas, ça risque de faire râler l'utilisateur plus qu'autre chose...

Reply

Marsh Posté le 15-12-2007 à 14:48:43    

FlorentG a écrit :

Je répond sur un autre point que les regexp :
 
Evite à tout prix les règles ultra-relous genre "pas d'espace avant la virgule." C'est extrêmement trivial de gérer ce cas, ça risque de faire râler l'utilisateur plus qu'autre chose...


 
 
OK !
autorisons alors la syntaxe suivante : "aaa a ,aaaa , aa,aa"  
les espaces sont admis avant et après la virgule et dans les mots-clefs, pourvu seulement que les mots-clefs soient séparés par des virgules.
 
Quel en sera le modèle à appliquer ?
 

Code :
  1. var model = "  ?  " ;
  2. var oReg = new RegExp(model, "g" );
  3. document.write("test() : " + oReg.test(keywords);


 
Merci.
 
Malinski2006


Message édité par malinski2006 le 15-12-2007 à 14:52:32
Reply

Marsh Posté le 15-12-2007 à 15:58:36    

Salut,

 

Il va te falloir splitter la chaîne sur chaque virgule, et ensuite vérifier chaque élément. Tu n'es pas obligé d'utiliser les RE pour ça, mais s'il t'en faut une, je pense à celle là: ^\s?((?:[a-zA-Z]| (?=\w)){2,})\s?$

  • ^ début de ligne obligatoire pour éviter de matcher au milieu d'une expression (genre "aa24 a", sans ^ matchera le 'a' final)
  • \s? : on accepte un espace en début de mot clé, mais il n'est pas obligatoire et n'est pas capturé (suivant ton dernier exemple, mais contraire à la règle du premier message, ce qui va dans la lignée de ce qu'à dit FlorentG)
  • ((?:[a-zA-Z]| (?=\w)){2,}): Après, on capture au minimum 2 caractères qui répond à cette règle: tout caractère ou un espace suivi d'au moins un caractère
  • \s? on accepte finalement un éventuel espace non capturé juste avant la fin de ligne (cas de "ab " qui ne serait pas capturé à cause de l'espace et de la règle précédente)
  • $ : fin de ligne obligatoire (cf point précédent)


Jeu sur lequel j'ai testé:

Citation :

aaa a
aaaa
 aa
aa
a52
 ab a
b
a b
c
ba


Et les matches sont:

Citation :

aaa a
aaaa
aa
aa
ab a
a b
ba

 

Voilà, je te garantis pas qu'elle n'est pas buggée, je suis pas un guru de ces trucs là, donc teste intensivement avec ton contexte :D

 

Edit: ptite correction sur l'explication fouillis...


Message édité par IrmatDen le 15-12-2007 à 16:04:09
Reply

Marsh Posté le 15-12-2007 à 16:29:35    

Je vais faire avec ta méthode !
Merci beaucoup !
 
Malinski2006
 :)  

Reply

Sujets relatifs:

Leave a Replay

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