[PHP] Regex strict (sans accents ni caractères spéciaux)
Résolu
NoSpe
-
Stanislas Poisson Messages postés 775 Statut Membre -
Stanislas Poisson Messages postés 775 Statut Membre -
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):
mais ça ne fonctionne pas ................
Pour résumer, si le client envoie
la chaine est modifié en
Merci à ceux qui chercheront !
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:
- Regex caractères accentués
- Caractères spéciaux - Guide
- Caractères ascii - Guide
- Caracteres speciaux - Guide
- Caractères spéciaux mac - Guide
- Exemple de mot de passe à 8 caractères - Guide
5 réponses
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
?>
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 ?
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 ?
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);
Regarde ca:
a adapter suivant ton cas bien entendu.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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.
Sinon, pense a mettre ton post en résolu.