Supprimer tout les chiffres/nombres contenus dans une chaine

Supprimer tout les chiffres/nombres contenus dans une chaine - PHP - Programmation

Marsh Posté le 10-09-2007 à 06:23:04    

Bonjour,
 
En ce début de semaine je me penche sur un script qui doit permettre de filtrer une chaine en fonction d'une autre.
 
Je dois supprimer tout chiffre (de -l'infini à +l'infini) de ma chaine ($chaine = "blah blah 3 oranges à 3 euros c'est pas cher pour mes 563 enfants :D" ).
 
Il me semble que le plus efficace est d'utiliser un preg_replace ? Mais je ne sais pas comment faire fonctionner la chose pour supprimer toute notion de chiffre dans ma chaine :- ?


---------------
L'insolite Yazerty.Net - Interprétation des rêves
Reply

Marsh Posté le 10-09-2007 à 06:23:04   

Reply

Marsh Posté le 10-09-2007 à 09:24:26    

Code :
  1. $chaine='unlds12fgdfgdfhdfhn1';
  2. $chaine1=ereg_replace("[^a-z]","",$chaine);
  3. echo $chaine1;


Message édité par nycius le 10-09-2007 à 09:24:36
Reply

Marsh Posté le 10-09-2007 à 10:37:12    

nycius > Il ne veut virer que les chiffres, pas la ponctuation et les espaces. Un ' ereg_replace("[0-9]","",$chaine); ' est plus approprié si on se contente de nombre entié positif base 10.
Si on veut gérer aussi les décimaux, les nombres négatifs, les nombres en hexadécimaux ou les exponentiel alors il faut des regexp plus complexe (on doit en trouver dans google ou sur le forum) ou un script qui gère les différents cas.

Reply

Marsh Posté le 10-09-2007 à 11:13:43    

En fait on sait pas trop ce qu'il veut au final donc faudrait qu'il nous dise.

Reply

Marsh Posté le 10-09-2007 à 11:47:20    

Euh s'il souhaite vraiment supprimer les chiffres, l'utilisation d'une regex est inutile, str_replace fera ça beaucoup plus simplement.
 
Maintenant je pense qu'il souhaite plus remplacer les nombres, auquel cas aucune des deux solutions proposées n'est correcte non plus dans la mesure ou les nombres négatifs seront mal remplacés ( ex: A-910B devienvra A-B au lieu de AB).
J'opterais pour une légère variation de la proposition d'omega2:

Code :
  1. preg_replace('/\-?\d+/', '', $lachaine);

Reply

Marsh Posté le 10-09-2007 à 15:47:03    

Je voulais effectivement supprimer toute trace de "nombre" vi, Merci à vous trois :) ! Je n'ai à priori pas de décimale.

 

Par contre j'ai un petit problème avec le filtrage de mes accents (en fait au finale je veux filtrer une chaine : sans chiffre/nombre ni accents et tout en minuscules.

 

J'ai fait ce petit bout de code :

 
Code :
  1. $text = "Bertrand Delanoë 2008 élections municipales";
  2. $text = strtolower ($text);
  3. $text = strtr($text, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ -'/", "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn----" );
  4. $text = preg_replace('|\W|', '-', $text);
  5. $text = preg_replace('/\-?\d+/', '', $text);
 

Mais cela me donne :

 

"bertrand-delano-lections-municipales"

 

Donc ça ne me va pas du tout car il me faut les lettres accentuées quand même, mais mises sous leur forme non accentuée (ex : "Delanoë" -> "delanoe" ).

 

Je ne cromprends pas pourquoi ça me supprime ces accent avec ce bout de code là ?


Message édité par yazerty le 10-09-2007 à 15:47:29

---------------
L'insolite Yazerty.Net - Interprétation des rêves
Reply

Sujets relatifs:

Leave a Replay

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