header("Content-type: text/plain");
 
setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1');
 
$in = "Les chiffres 1,2,3, les accents éêèëç, les spéciaux +-*/'<>&\"#()[] fin.";
 
$pattern = array("[^a-z]{1,}",
                 "([^[:alnum:]]{1,})",
                 "/[^\w]/",
				 "/[^[:alnum:]]/",				 
				 "/[^[:alnum:]\+\-\/\*'.,<>()]/"
                 );
 
$replace = "_";
 
$i=0;
$test[] = eregi_replace($pattern[$i++],$replace,$in);
$test[] = eregi_replace($pattern[$i++],$replace,$in);
$test[] = preg_replace($pattern[$i++],$replace,$in);
$test[] = preg_replace($pattern[$i++],$replace,$in);
$test[] = preg_replace($pattern[$i++],$replace,$in);
 
$pad = 50;
echo str_pad("Test:Entrée:",$pad).$in."\n";
foreach( $test as $key => $result ) {
        echo str_pad("Resultat [$key] ($pattern[$key]):",$pad).$result."\n";
}
 
//Retournera : 
//Test:Entrée:                                      Les chiffres 1,2,3, les accents éêèëç, les spéciaux +-*/'<>&"#()[] fin.
//Resultat [0] ([^a-z]{1,}):                        Les_chiffres_les_accents_les_sp_ciaux_fin_
//Resultat [1] (([^[:alnum:]]{1,})):                Les_chiffres_1_2_3_les_accents_les_sp_ciaux_fin_
//Resultat [2] (/[^\w]/):                           Les_chiffres_1_2_3__les_accents_éêèëç__les_spéciaux________________fin_
//Resultat [3] (/[^[:alnum:]]/):                    Les_chiffres_1_2_3__les_accents_éêèëç__les_spéciaux________________fin_
//Resultat [4] (/[^[:alnum:]\+\-\/\*'.,<>()]/):     Les_chiffres_1,2,3,_les_accents_éêèëç,_les_spéciaux_+-*/'<>___()___fin.

Si comme moi vous perdez les accents : lisez l'excellent tutoriel en Français sur Les expressions régulières PCRE (Perl Compatible Regular Expressions) Remarque importante: on a vu plus haut que les classes POSIX [:alpha:], [:alnum:], [:word:] ou PCRE \w comprennent les accentués, mais seulement si le bon jeu de caractères est installé sur le serveur, sinon, un setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1') devrait résoudre le problème (ou bien 'fr_FR','fra_fra'...Vérifiez sur votre serveur les locales installées).

Ressources : Expressions rationnelles (compatible Perl)

  • Options de recherche
  • Séquences d'échappement
    • \w tout caractère de "mot"
    • \W tout caractère qui n'est pas un caractère de "mot"
    • mot : Un caractère de "mot" sera une lettre, un chiffre ou le caractère souligné, c'est-à-dire un caractère qui pourra être une partie d'un mot Perl.