[Expresssions régulières] Que des chiffre que des lettres !!!

Que des chiffre que des lettres !!! [Expresssions régulières] - PHP - Programmation

Marsh Posté le 31-01-2004 à 18:09:11    

Bonjour,
 
Je voudrais tester si une chaine ne contient que des chiffres ou des lettres et je ni arrive pas.
 
J'ai fait ça mais ça fonctionne pas :
 

Code :
  1. if(ereg ("[[:alnum:]+^[:punct:]+]", $exp))
  2. {
  3. echo "ok";
  4. }
  5. else
  6. {
  7. echo "caractere non conventionnel";
  8. }


 
Merci de m'aider

Reply

Marsh Posté le 31-01-2004 à 18:09:11   

Reply

Marsh Posté le 01-02-2004 à 00:34:28    

Je te donnerais pas le code en PHP car je n'y connais rien du tout pour le moment ! Je te parle de l'expérience que j'ai avec le VB (j'entends déjà certains dire que c'est pas un langage de prog  :p ). Bref...
 
Pourquoi, tu ne mets pas les chiffres de 0 à 9 dans un tableau, jusque là c'est pas compliqué. Ensuite tu prend chacun des caractère, de la chaine, avec la fonction "substr" et tu compare chaque lettre à ce tableau et si tu tombe sur l'une de ses valeurs tu va vite voir de quoi est composé ta chaine !
 
Il te faut simplement utilisé une boucle, celle que tu veux, do while ou for next...traduit pour le PHP  :D histoire de faire tourner la fonction "substr". Voilà quelques idée que j'aurais moi même fait. Une fonction qui va te servir aussi c'est de savoir le nombre de caractère que contient ta chaine. Utile pour la boucle que tu va mettre  [:ddr555] En PHP c'est "Strlen".
 
Une chose à laquelle je pourrais pas te réponde, c'est quand tu tapes des chiffres dans une zone de saisie, sont-il des considérer comme entier ou comme un string. C'est assez important pour passer en revue chacun des caractère. Si c'est pas le cas, je te laisse le soin de chercher une fonction qui converti les entier en string...
 
A bon entendeur et bonne chance. J'ai le mien de mon coté ! :whistle:


Message édité par cvb le 01-02-2004 à 00:53:08
Reply

Marsh Posté le 01-02-2004 à 01:58:05    

cvb a écrit :

ploum ploum


 
Parce que les regex c'est fait pour ça et que c'est bien de les utiliser.

Reply

Marsh Posté le 01-02-2004 à 10:04:31    

chaica a écrit :


 
Parce que les regex c'est fait pour ça et que c'est bien de les utiliser.
 

oui et j'ai dis que je ne connaissais pas le PHP, tu n'as pas du lire la totalité du post :D Je donné un début de réponse qu'il attendait depuis déjà un petit moment. D'allieur ça t'as fait venir  ! [:spamafote]

Reply

Marsh Posté le 01-02-2004 à 11:18:17    

Salut,
 
cvb, dans ton exemple, je pense qu'il sera beaucoup plus rapide de comparer les codes ASCII, parce que sinon pour chaque caractères du texte, tu devras balayer tout le tableau (par exemple 36 éléments en considérant les chiffres et les lettres minuscules) alors qu'en faisant 4 comparaisons en ASCII, tu fais le même boulot.  
 
Sinon momo194, je ne connais pas vraiment ereg (je suis plutot habitué aux expressions régulières Perl), mais d'après les exemples que j'ai vu dans la doc de php sur ereg, [] sert à définir une classe de caractères (comme dans PCRE d'ailleurs) et donc les quantificateurs comme + doivent être mis à l'extérieur ce qui donnerait :
 

Code :
  1. ereg ('[[:alnum:]^[:punct:]]+', $exp)


 
De plus d'après ce que j'ai lu dans les commentaires, le symbôle ^ pour exclure une classe de caractère n'est valable uniquement qu'en début de classe, ce qui n'est pas le cas dans ton exemple.
D'aileurs, as-tu besoin d'exclure la classe de caractères [:punct:] ? [:alnum:] ne contient-il pas que des caractères alpha-numériques (plus le _ peut-être) ?
Donc on pourrait considérer '[[:alnum:]]+' mais dans ce cas-là, ereg renverait TRUE pour la chaîne '!.#abc12@)' car il trouverait la partie abc12. Ce qu'il faut donc, c'est spécifié que toute la chaîne doit correspondre au masque. Pour cela, utilises ^ et $ en début et fin de chaîne :
'^[[:alnum:]]+$' et d'ailleurs remplace le + par un * si tu considères que la chaîne vide doit renvoyer TRUE.
Remarque : si [:alnum:] ne fait pas ce que tu veux, tu peux très bien définir toi-même ta classe de caractère en faisant [a-zA-Z0-9] (par contre pour les accents  :sarcastic: )

Reply

Sujets relatifs:

Leave a Replay

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