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

Eléphant du PHP | 95 Messages

25 mars 2009, 12:47

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.
Je veux apprendre !!

Eléphant du PHP | 141 Messages

25 mars 2009, 12:51

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...

ViPHP
ViPHP | 4039 Messages

25 mars 2009, 13:05

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.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 95 Messages

25 mars 2009, 13:23

Merci Berzemus !! Ta solution est lumineusement simple !
Ca fonctionne parfaitement...
Je veux apprendre !!

ViPHP
ViPHP | 4039 Messages

25 mars 2009, 14:46

Merci Berzemus !! Ta solution est lumineusement simple !
Ca fonctionne parfaitement...
Ouaip, c'est green :wink:

Ravi d'avoir aidé.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.