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

Signaler
-
Messages postés
457
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
22 mai 2018
-
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 !

5 réponses

Messages postés
1292
Date d'inscription
mardi 24 janvier 2012
Statut
Membre
Dernière intervention
26 octobre 2014
221
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57206 internautes nous ont dit merci ce mois-ci

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 ?
Messages postés
1292
Date d'inscription
mardi 24 janvier 2012
Statut
Membre
Dernière intervention
26 octobre 2014
221
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);

Messages postés
457
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
22 mai 2018
56
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.
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.
Messages postés
457
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
22 mai 2018
56
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.