[PHP] Regex strict (sans accents ni caractères spéciaux)

Résolu/Fermé
NoSpe - 2 janv. 2013 à 10:29
Stanislas Poisson Messages postés 423 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 22 mai 2018 - 5 janv. 2013 à 16:02
Bonjour,

Etant débutant en Regex, je voudrais que l'on me donne la solution à ce casse-tête:
Une regex qui:
- supprime tous les caractères spéciaux dans la chaine de ce type là:
£$¤µ*%§!:;,@}=])°^¨_\'|-[({'#"~&<>²
- remplace les:
áàâäã ÁÀÂÄÃ éèêë ÉÈÊË íìîï ÍÌÎÏ óòôöõ ÓÒÔÖÕ úùûü ÚÙÛÜ ÿ Y
par leurs homologues sans accents (a,e,i,o,u,y)
- rapproche les lettres si la chaîne contient un espace (exemple: "citron vert" devient "citronvert").


J'ai trouvé ceci (en fouillant sur internet):

$entree = array('#[áàâäã]#','#[ÁÀÂÄÃ]#','#[éèêë]#','#[ÉÈÊË]#','#[íìîï]#','#[ÍÌÎÏ]#','#[óòôöõ]#','#[ÓÒÔÖÕ]#','#[úùûü]#','#[ÚÙÛÜ]#','#ÿ#','#Y#','# #','#[^a-zA-Z0-9_-£$¤µ*%§!:;,@}=])°^¨_\\\''|-[({#"~&<>²]#');
$sortie = array('a','a','e','e','i','i','o','o','u','u','y','y','','');
preg_replace($entree,$sortie,$pseudo);


mais ça ne fonctionne pas ................

Pour résumer, si le client envoie
#<föù>dré£%}

la chaine est modifié en
foudre


Merci à ceux qui chercheront !

A voir également:

5 réponses

tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 220
2 janv. 2013 à 10:53
Salut,

<?php
function teste($chaine)
{    
    
    $accents = Array("/é/", "/è/", "/ê/","/ë/", "/ç/", "/à/", "/â/","/á/","/ä/","/ã/","/å/", "/î/", "/ï/", "/í/", "/ì/", "/ù/", "/ô/", "/ò/", "/ó/", "/ö/");
    $sans = Array("e", "e", "e", "e", "c", "a", "a","a", "a","a", "a", "i", "i", "i", "i", "u", "o", "o", "o", "o");
    
    $chaine = preg_replace($accents, $sans,$chaine);  
    $chaine = preg_replace('#[^A-Za-z0-9]#','',$chaine);
	   
    return $chaine; 
}

$toto = '#£$¤µ*%§!:;,@}=])°^¨_\'|-[({\'#"~&<>² <föù>dré£%}';
echo teste($toto);//retourne » foudre
?>

1