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

Résolu
NoSpe -  
Stanislas Poisson Messages postés 424 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   220
 
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
NoSpe
 
Merci d'avoir répondu.

En fait, je voulais que cela tienne sur 2-3 lignes plutôt qu'avoir à insérer un fonction.

Plus de précision: ma page où se place ma regex est une page de traitement_de_formulaire.php
Et je ne sais pas où placer le code si cette fonction est correcte (avant traitement et insertion en bdd ?)

Je suis débutant et je bidouille car je n'arrive pas à retenir tout ce qui concerne les regex ...
Si quelqu'un a ce même genre de code en Javascript, j'accepte aussi lol

D'autres avis ?
0
tryan44 Messages postés 1288 Date d'inscription   Statut Membre Dernière intervention   220
 
La fonction vous la collez en haut de votre page "traitement_de_formulaire.php" puis ensuite vous traitez votre variable comme ceci :
$votre_variable = teste($votre_variable);

0
Stanislas Poisson Messages postés 424 Date d'inscription   Statut Membre Dernière intervention   66
 
Regarde ca:
function make_alias($name){ 
  $alias=mb_strtolower($name,'UTF-8'); 
  $alias=mb_strtolower(trim($alias)); 
  $search=array(utf8_decode('@[ÈÉÊËèéêë]@i'),utf8_decode('@[ÀÁÂÃÄÅàáâãäå]@i'),utf8_decode('@[ÌÍÎÏìíîï]@i'),utf8_decode('@[ÙÚÛÜùúûü]@i'),utf8_decode('@[ÒÓÔÕÖðòóôõö]@i'),utf8_decode('@[çÇ]@i'),utf8_decode('@[Ýýÿ]@i'),utf8_decode('@[,;:!§/.?*°+\'\-]@i'),utf8_decode('@[\s]@')); 
  $replace=array('e','a','i','u','o','c','y','','-'); 
  $alias=preg_replace($search,$replace,utf8_decode($alias)); 
  $search=array('.',',','?',';',':','/','!','§','%','ù','*','µ','¨','^','$','£','ø','=','+','}',')','°',']','@','^','\\','|','[','{','#','~','}',']','&','²'); 
  $alias=str_replace($search,'',$alias); 
  $search=array('@-{2,}@i'); 
  $alias=preg_replace($search,'-',$alias); 
  $alias=utf8_encode($alias); 
  return $alias; 
 } 


a adapter suivant ton cas bien entendu.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NoSpe
 
Bonjour,

Merci pour vos réponses !

tryan44, ta fonction est parfaite, je t'en remercie !
Stanislas Poisson, je n'ai pas testé la tienne mais je l'aurais fait si je n'avais pas réussi à bien faire la méthode de tryan44.

Merci à vous deux.
0
Stanislas Poisson Messages postés 424 Date d'inscription   Statut Membre Dernière intervention   66
 
je te propose d'essayer aussi celle que je te propose, elle est tirée du même script mais a des éléments supplémentaires tel que la gestion des espaces multiples et la mise en place de tiret de séparation des mots (ainsi que le remplacement des tiret multiple :p et le tout placer en utf8 par defaut quelque soit le type d'entrée.

Sinon, pense a mettre ton post en résolu.
0