Page 1 sur 1

Regexp : longueur minimum sur une chaine de caractères dans

Posté : 25 mars 2009, 12:47
par dmx-moteur
J'utilise des expressions régulières lors d'une validation de formulaire.

Je souhaite contrôler que l'utilisateur a bien entré un nombre minimum de caractères (en l'occurence 300) dans un textarea. Dans ce textarea, il peut bien entendu passer des lignes.

Je voulais utiliser cette expression régulière pour faire mon test :

Code : Tout sélectionner

^.{300,}$
mais j'ai cru comprendre que le point indiquait une chaine de caractère sans retour ligne. Du coup mon test ne fonctionne pas...
J'ai donc pensé à utiliser * plutôt que le . :

Code : Tout sélectionner

^*{300,}$
Mais là j'ai une erreur : Warning: Compilation failed: nothing to repeat at offset 1

Quelqu'un a-t-il une idée ?

Merci par avance de votre aide.

Posté : 25 mars 2009, 12:51
par julian
Alors,

Déjà, ta regexp doit être encadrée par des délimiteurs (par exemple : `)
Ensuite pour gérer les retour à la ligne, il faut lui préciser qu'il peut avoir n'importe quel caractère (avec le point) OU un retour à la ligne(avec \n).

Je pense que le $ (pour dire que c'est la fin de chaine) est inutile ici mais ne gêne pas...

Posté : 25 mars 2009, 13:05
par Berzemus
Je pense que dmx-moteur sait à propose des délimiteurs (moi, c'est le | perso. Mais j'ai toujours tendance de mettre / comme en perl. le # est plus fréquent en php).

Pour ce qui est de ton regex, si le point valide tout les caractères, le * n'est qu'un indicateur de répétition semblable au +, il ne signifie rien tout seul. Ils se comparent ainsi:
* = {0,}
+ = {1,}

Si tu veux que ça marche, j'utiliserais ceci:

Code : Tout sélectionner

^[\s\S]{300,}
le \s représente tout les espaces blancs, et le \S tout ce qui ne l'est pas. Du coup, les deux ensemble valident absolument tout.

le $ n'a pas d'utilité, comme l'a dit julian. Le ^ est utile pour l'arrêter après les 300 premiers caractères, sinon le moteur continuerait, mais sinon aucun intérêt.

Posté : 25 mars 2009, 13:23
par dmx-moteur
Merci Berzemus !! Ta solution est lumineusement simple !
Ca fonctionne parfaitement...

Posté : 25 mars 2009, 14:46
par Berzemus
Merci Berzemus !! Ta solution est lumineusement simple !
Ca fonctionne parfaitement...
Ouaip, c'est green :wink:

Ravi d'avoir aidé.