Réponses:
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, ""));
str.replace(/[^a-zA-Z0-9]/g, "")
str.replace(/[^a-zA-Z0-9 ]/g, "");
avis, il y a un espace entre 0-9 et]
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, '');
/[^a-zA-Z0-9]/g
()
et whitespaces
dans la chaîne.text().replace(/[ ()]/g, '')
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
).
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.
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 '';
}
reg
dans votre première fonction.
rechercher tout pas (caractères de mot || espace):
str.replace(/[^\w ]/, '')
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
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 '';
}
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));
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.