Interdire caratères spéciaux

WRInaute accro
Bonjour,
je suis entrain de créer un formulaire en ligne et j'aimerai lors de l'inscription du pseudo, interdire les caractères spéciaux tels que é, à, è ê etc...
Voilà ce que j'ai fait mais marche pas trés fort:
$Array = array('ä', 'ê', 'ë', 'ô', 'î', 'ï', 'ô', 'ö', 'û', 'ü', 'ÿ', '€', '#', '+', '*', ' ', "'", '"', '²', '&', 'é', '~', '"', '{', '(', '[', '|', 'è', '`', 'ç', '^', 'à', 'à', ')', '}', '=', '}', '^', '$', '£', '¤', 'ù', '%', '*', 'µ', ',', '?', ';', ':', '/', '!', '§', '>', '<');

if (preg_match('#[$Array]#', $FormulairePseudo))
{
echo "PAS BON";
}
else
{
echo "BON";
}
A force d'être dessus, je ne vois pas ce qu'il cloche!
Merci de votre attention!
 
WRInaute accro
Non y'a pas d'erreur!
ça fonctionne mais c'est pas exactement efficace lorsque je fais des essais....si je mets un accent dans mon pseudo....mon expression fonctionne mais si je mets un espace marche plus (ou une fois sur deux)
 
WRInaute discret
Etrange ca.

voici la fonction que j'utilise et qui marche très bien pour renommer des string. Si ca peut t'aider...

Code:
function renommage($sNom){
		//enlève les accents et transforme les caractères spéciaux en '_'
		$liste_noire = array(
		"¥" => "Y", "µ" => "u", "À" => "A", "Á" => "A",
		"Â" => "A", "Ã" => "A", "Ä" => "A", "Å" => "A",
		"Æ" => "A", "Ç" => "C", "È" => "E", "É" => "E",
		"Ê" => "E", "Ë" => "E", "Ì" => "I", "Í" => "I",
		"Î" => "I", "Ï" => "I", "Ð" => "D", "Ñ" => "N",
		"Ò" => "O", "Ó" => "O", "Ô" => "O", "Õ" => "O",
		"Ö" => "O", "Ø" => "O", "Ù" => "U", "Ú" => "U",
		"Û" => "U", "Ü" => "U", "Ý" => "Y", "ß" => "s",
		"à" => "a", "á" => "a", "â" => "a", "ã" => "a",
		"ä" => "a", "å" => "a", "æ" => "a", "ç" => "c",
		"è" => "e", "é" => "e", "ê" => "e", "ë" => "e",
		"ì" => "i", "í" => "i", "î" => "i", "ï" => "i",
		"ð" => "o", "ñ" => "n", "ò" => "o", "ó" => "o",
		"ô" => "o", "õ" => "o", "ö" => "o", "ø" => "o",
		"ù" => "u", "ú" => "u", "û" => "u", "ü" => "u",
		"ý" => "y", "ÿ" => "y", "°" => "_", "«" => "_",
		"»" => "_", "œ" => "_", "„" => "_", "‚" => "_",
		"£" => "_", "¿" => "_", "¡" => "_", "Ð" => "_",
		"Ø" => "_", "Þ" => "_", "æ" => "_", "ð" => "_",
		"
 
WRInaute passionné
interdire les caracteres speciaux reviendrait à n'autoriser que les caractères alpha numeriques

une expression reguliere par le negatif me paraitrait plus judicieuse

rog
 
WRInaute discret
Voila, ça c'est ce que j'utilise, ça remplace tous les accents par leur équivalents non accentués
Code:
$str=strtr($str_in,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn")
 
WRInaute occasionnel
passion a dit:
Merci pour vos commentaires mais j'ai trouvé une parade excellente et toute bête:
(preg_match('#[^a-zA-Z0-9]#', $bonpseudo))
:wink:

ce n'est pas une parade, c'est la meilleure façon de faire ;)
le traitement par whitelist est toujours plus "carré" que celui par blacklist, vu qu'il couvre TOUS les caractères "spéciaux" (tu ne peux pas oublier un ç, un ò, un ñ, etc)
 
WRInaute discret
La bonne approche est d'utiliser les 2, d'abord une whitelist pour transformer tout ce qui peut l'être, puis la blacklist pour virer tout ce qui persiste, par exemple:
Code:
//switch accents to simpler text
$txt=strtr($txt,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
//strip non alpha-numerical 
$txt =  preg_replace('@([^a-z|A-Z|0-9|-])+@', '', $txt);
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut