Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1605 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°627069
momo194
Posté le 31-01-2004 à 18:09:11  profilanswer
 

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

mood
Publicité
Posté le 31-01-2004 à 18:09:11  profilanswer
 

n°627453
cvb
Posté le 01-02-2004 à 00:34:28  profilanswer
 

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
n°627525
chaica
Posté le 01-02-2004 à 01:58:05  profilanswer
 

cvb a écrit :

ploum ploum


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

n°627557
cvb
Posté le 01-02-2004 à 10:04:31  profilanswer
 

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]

n°627586
Tentacle
Posté le 01-02-2004 à 11:18:17  profilanswer
 

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: )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[PHP] Prise de tête avec les expressions régulièresexpressions régulières
[C] Comment convertir un tableau en chiffre et reciproquement?Ces satanées expressions régulières...
[PHP] verification d'email - expressions régulieres[PHP] Expressions régulières... elle marche pas comme je veux...
[C] Comment passer un tableau de 2 char en un chiffre hexa[PHP] Convertir un chiffre en lettre
[SQL - résolu] requete d'une suite de chiffre.Comment avoir une variable avec chiffre qui varie ?
Plus de sujets relatifs à : [Expresssions régulières] Que des chiffre que des lettres !!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR