258 votes

Supprimez tous les caractères spéciaux, sauf l'espace, d'une chaîne de caractères à l'aide de JavaScript.

Je veux supprimer tous les caractères spéciaux, sauf l'espace, d'une chaîne de caractères en utilisant JavaScript.

Par exemple, abc's test#s devrait donner comme résultat abcs tests .

543voto

Petar Ivanov Points 29530

Vous devez utiliser la fonction de remplacement de chaîne, avec une seule regex. En supposant que par caractères spéciaux, vous voulez dire tout ce qui n'est pas une lettre, voici une solution :

const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));

203voto

Lakshmana Kumar D Points 118

Vous pouvez le faire en spécifiant les caractères que vous souhaitez supprimer :

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

Sinon, pour changer tous les caractères sauf les chiffres et les lettres, essayez :

string = string.replace(/[^a-zA-Z0-9]/g, '');

35voto

Seagull Points 1222

La première solution ne fonctionne pour aucun alphabet UTF-8. (Elle coupera 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 ).

16voto

dovid Points 4559

Rechercher tous les caractères non (caractères de mot || espace) :

str.replace(/[^\w ]/, '')

14voto

darkside Points 133

Je ne connais pas JavaScript, mais n'est-il pas possible d'utiliser une expression rationnelle ?

Quelque chose comme [^\w\d\s] correspondra à tout sauf aux chiffres, aux caractères et aux espaces. Ce serait juste une question de trouver la syntaxe en JavaScript.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X