Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/04/2007, 15h25   #1
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 72
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 72
Points : 18
Points : 18
Par défaut filtrer les lettres/chiffres

Bonjour,

Je souhaite écrire une fonction qui prenne en entrée une chaine de caractère quelconque, et qui, grâce à une RegExp, remplace tout ce qui n'est pas une des 26 lettres, et tout ce qui n'est pas un chiffre, par un underscore.

Merci.
PamelaGeek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2007, 16h31   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
1
2
 
$out = preg_replace('/[^[:alnum:]]/', '_', $in);
?

[:alnum:] est une classe qui représente l'ensemble des caractères alphabétiques et numériques qui est niée (négation de classe). Donc tout caractère n'appartenant pas à cet ensemble sera remplacé par un underscore.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2007, 18h16   #3
Modérateur
 
Avatar de Rakken
 
Inscription : août 2006
Messages : 1 207
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 207
Points : 1 137
Points : 1 137
Après, si tu veux te le faire a la main :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * Cette fonction prend une string et remplace tous les caracteres non alphabetique par _
 * @param string $word : Le mot a traiter
 * @return string : Le mot propre.
 */
function replace_letter($word) {
  $new_word = '';
  $i = 0;
  while (isset($word[$i])) {
    if (ctype_alpha($word[$i]))
    	$new_word .= $word[$i];
    else
	    $new_word .= '_';
    $i++;
  }
  return ($new_word);
}
Mais la solution du regexp me semble nettement plus élégante ^_^
__________________
Rakken

Oneira, un monde imaginaire d'Heroic Fantasy.

Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/
Rakken est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 20h35   #4
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
Mais la solution du regexp me semble nettement plus élégante ^_^
Surtout : elle tient en une seule ligne
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2007, 09h02   #5
Membre habitué
 
Inscription : octobre 2006
Messages : 325
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 325
Points : 137
Points : 137
mais le probleme les mec c'est que vous avais pas bien lu le sujet
lol

ou si c'est sa qu'il veut il a pas poser la bonne question car avec la classe [:alnum:] les lettres comme é,à,ç,ñ et tous type d'accent sont accepter par cette classe hors lui ne veut que

Citation:
des 26 lettres
Donc tous se qui a un accent il en veut pas


il faut donc remplacer [:alnum:] par [a-zA-Z0-9] qui permet de ne garder que les 26 lettre (majuscule ou minuscule)plus tous les chiffres
teen6517 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h02.


 
 
 
 
Partenaires

Hébergement Web