La première solution ne fonctionne pour aucun alphabet UTF-8. (Elle coupe le texte tel que ). J'ai réussi à créer une fonction qui n'utilise pas RegExp et qui utilise un bon support UTF-8 dans le moteur JavaScript. L'idée est simple : si un symbole est égal en majuscule et en minuscule, c'est un caractère spécial. La seule exception est faite pour les espaces blancs.
function removeSpecials(str) {
var lower = str.toLowerCase();
var upper = str.toUpperCase();
var res = "";
for(var i=0; i<lower.length; ++i) {
if(lower[i] != upper[i] || lower[i].trim() === '')
res += str[i];
}
return res;
}
Mise à jour : Veuillez noter que cette solution ne fonctionne que pour les langues où il y a des lettres minuscules et majuscules. Dans des langues comme le chinois, cela ne fonctionnera pas.
Mise à jour 2 : Je suis arrivé à la solution originale lorsque je travaillais sur une recherche floue. Si vous essayez également de supprimer les caractères spéciaux pour mettre en œuvre une fonctionnalité de recherche, il existe une meilleure approche. Utilisez n'importe quel bibliothèque de translittération qui vous produira une chaîne de caractères uniquement à partir de caractères latins et ensuite la simple Regexp fera toute la magie de la suppression des caractères spéciaux. (Cela fonctionnera également pour le chinois et vous obtiendrez également des avantages secondaires en faisant de la Tromsø
== Tromso
).
22 votes
Il serait préférable d'établir une liste blanche plutôt qu'une liste noire. Il suffirait alors de faire [a-z]|[0-9]|. \s
1 votes
Une erreur de script ? Avez-vous débogué ? Ou alors mettez un bloc try...catch dans le code javascript.
1 votes
@ Ape-inago pouvez-vous m'expliquer un peu plus RegExp s'il vous plaît.
4 votes
Veuillez définir "caractère spécial" ! Est-ce que "" est spécial pour vous ? (En y réfléchissant, vous comprendrez le point de vue de @Ape-iango).
0 votes
regardez ma variable specialChars. Quelque chose comme ça.
0 votes
Qu'en est-il de "" ? (Non, ce ne sont pas les mêmes que ci-dessus.) :-P
0 votes
@deceze je réalise qu'il y a environ 300 caractères ascii, ces caractères étaient pour l'exemple. Je ne savais pas pour RegExp et que je pouvais faire une liste blanche.
0 votes
@Timothy Meilleur essai 109 000+ caractères supporté par Unicode, qui est ce que Javascript utilise en interne. Juste un conseil général et bien intentionné : Chaque fois que vous pensez "caractères spéciaux", soyez un peu plus précis :-)
0 votes
Je suis désolé de ne pas savoir tout ce qui se passe.
8 votes
Je ne pense pas que quiconque ici ait voulu s'offenser. Je me suis déjà fait griller en faisant une liste noire, car il y a toujours des petits "pièges" qui finissent par passer (comme les exemples de Deceze). En fin de compte, l'approche correcte dépend davantage de la raison pour laquelle vous essayez de le faire.