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


159

Je souhaite supprimer tous les caractères spéciaux à l'exception de l'espace d'une chaîne à l'aide de JavaScript.

Par exemple, abc's test#s devrait sortir comme abcs tests.


3
Comment définissez-vous le caractère spécial?
Keith Irwin

Réponses:


351

Vous devez utiliser la fonction de remplacement de chaîne, avec une seule expression régulière. En supposant que vous entendez par caractères spéciaux 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, ""));


5
Pour utiliser cette solution sur l' alphabet non-latin s'il vous plaît vérifier cette réponse à
Efkan

Cela supprimera également les caractères numériques!
tech_geek

15
@tech_geek vous pouvez fairestr.replace(/[^a-zA-Z0-9]/g, "")
Chidi Williams

2
En fait, vous avez besoin de cet str.replace(/[^a-zA-Z0-9 ]/g, "");avis, il y a un espace entre 0-9 et]
Ammar Shah

Il a besoin de quelques ajustements, il n'a pas supprimé / ou - les caractères et le premier caractère de camelCase censé être en minuscules, mais celui-ci en majuscules.
Sansun

134

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 à l'exception des chiffres et des lettres, essayez:

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

4
et si je ne veux pas supprimer d'espace en utilisant ceci? /[^a-zA-Z0-9]/g
aadi1295

8
@ArbazAbid pour garder de l'espace, ajoutez simplement cela aux caractères de la liste blanche. votre expression régulière serait "/ [^ a-zA-Z0-9] / g" (notez les espaces après 9)
Crhistian Ramirez

1
C'était la réponse qui fonctionnait, si un espace était nécessaire.
Nathan

cela remplace ()et whitespacesdans la chaîne.text().replace(/[ ()]/g, '')
C Alonso C Ortega

31

La première solution ne fonctionne pour aucun alphabet UTF-8. (Il coupera du texte tel que Привіт). J'ai réussi à créer une fonction qui n'utilise pas RegExp et utilise un bon support UTF-8 dans le moteur JavaScript. L'idée est simple si un symbole est égal en majuscules et en minuscules, c'est un caractère spécial. La seule exception concerne les espaces.

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 contenant 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 des caractères spéciaux pour implémenter la fonctionnalité de recherche, il existe une meilleure approche. Utilisez n'importe quelle bibliothèque de translittération qui produira votre chaîne uniquement à partir de caractères latins, puis la simple expression rationnelle fera toute la magie de la suppression des caractères spéciaux. (Cela fonctionnera également pour le chinois et vous recevrez également des avantages secondaires en faisant Tromsø== Tromso).


Merci pour cette solution assez créative. Cela correspond beaucoup plus à la manière dont les langues fonctionnent réellement, puisque beaucoup d'entre nous ne considèrent pas les caractères spéciaux "Привіт" ou "æøå". La plupart des solutions disponibles coupent tout caractère qui ne fait pas partie de l'alphabet anglais.
Alex Langberg

1
Presque la réponse parfaite pour moi, mais malheureusement, il considère les caractères chinois comme des caractères spéciaux.
Eric Majerus

@EricMajerus et hindi aussi
programmeur

Attention, cela considère également les nombres comme des caractères spéciaux.
just_user

11

Je ne connais pas JavaScript, mais n'est-ce pas possible d'utiliser regex?

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


1
stackoverflow.com/a/4374890/2384606 Voici la réponse à votre question :)
Carmela

8

J'ai essayé la solution très créative de Seagul, mais j'ai trouvé qu'elle traitait également les nombres comme des caractères spéciaux, ce qui ne répondait pas à mes besoins. Voici donc mon ajustement (de sécurité) de la solution de Seagul ...

//return true if char is a number
function isNumber (text) {
  if(text) {
    var reg = new RegExp('[0-9]+$');
    return reg.test(text);
  }
  return false;
}

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

Vous avez oublié de déclarer regdans votre première fonction.
Noman Ali

7

rechercher tout pas (caractères de mot || espace):

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

parfait! suppression de tous les caractères Unicode spéciaux de la chaîne.
abhishake il y a

1

Essayez d'utiliser celui-ci

var result= stringToReplace.replace(/[^\w\s]/gi, '')

ici ^ carat est pour la négation \ w pour [a-zA-Z0-9_] caractères de mot et \ s pour l'espace / [] / gi pour global


0

Le point (.) peut ne pas être considéré comme spécial. J'ai ajouté une condition OR à la réponse de Mozfet & Seagull:

function isNumber (text) {
      reg = new RegExp('[0-9]+$');
      if(text) {
        return reg.test(text);
      }
      return false;
    }

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

0

const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # 
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) ==  '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');


console.log(replaceString.match(/(?<=->).*?(?=<-)/g));


-11

Dont les caractères spéciaux que vous souhaitez supprimer d'une chaîne, préparez une liste d'entre eux, puis utilisez la fonction de remplacement javascript pour supprimer tous les caractères spéciaux.

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

ou vous pouvez exécuter une boucle pour une chaîne entière et comparer un seul caractère avec le code ASCII et régénérer une nouvelle chaîne.


10
Non, ne faites pas ça. C'est vraiment terriblement lent. Il est préférable d'utiliser une expression régulière.
Keith Irwin

Cette solution est très intéressante pour remplacer un seul caractère. Dans mon cas, cela a été utile, merci.
Vahid Najafi

Au lieu d'utiliser la méthode replace plusieurs fois, veuillez l'utiliser une seule fois en utilisant des expressions régulières.
FAISAL
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.