使用JavaScript从字符串中删除除空格之外的所有特殊字符

我想使用JavaScript从字符串中删除除空格之外的所有特殊字符。

例如,< p > abc's test#s 应输出为 abcs tests . < / p >
623595 次浏览

你想从字符串中删除谁的特殊字符,准备一个列表,然后使用javascript替换函数删除所有特殊字符。

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

或者你可以为整个字符串运行循环,并将单个单个字符与ASCII码进行比较,并重新生成一个新字符串。

你应该使用字符串替换函数,一个单一的正则表达式。 假设这里的特殊字符是指任何不是字母的字符,这里有一个解决方案:

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

我不知道JavaScript,但它不是可能使用正则表达式?

[^\w\d\s]这样的东西可以匹配除数字、字符和空白之外的任何东西。在JavaScript中找到语法只是一个问题。

你可以指定你想要删除的字符:

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

或者,要更改除数字和字母以外的所有字符,请尝试:

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

第一种解决方案不适用于任何UTF-8字母。(它将剪切诸如Привіт这样的文本)。我已经设法创建了一个不使用RegExp的函数,并在JavaScript引擎中使用了良好的UTF-8支持。原理很简单,如果一个符号的大写和小写相等,它就是一个特殊字符。唯一的例外是空格。

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;
}

更新:请注意,此解决方案仅适用于有小写字母和大写字母的语言。在像中文这样的语言中,这行不通。

更新2:当我在一个模糊搜索工作时,我得到了原来的解决方案。如果您还试图删除特殊字符来实现搜索功能,还有更好的方法。使用任何音译图书馆,它将只生成由拉丁字符组成的字符串,然后简单的Regexp将执行删除特殊字符的所有魔法。(这也适用于中文,你也会通过使Tromsø == Tromso获得额外的好处)。

我尝试了Seagul非常有创意的解决方案,但发现它也将数字视为特殊字符,这并不适合我的需求。以下是我对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 '';
}

点(.)可能不被认为是特殊的。我在Mozfet的&海鸥的回答是:

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 '';
}

搜索所有不(单词字符||空格):

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

试着用这个

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

[^]表示否定,\w表示[a-zA-Z0-9_]字符,\s表示空格, /[]/g用于全局

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));

试试这个:

const strippedString = htmlString.replace(/(<([^>]+)>)/gi, "");
console.log(strippedString);

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

正则表达式

let string  = "!#This tool removes $special *characters* /other/ than! digits, characters and spaces!!!$";


var NewString= string.replace(/[^\w\s]/gi, '');
console.log(NewString);

结果//删除除数字、字符和空格以外的特殊字符

现场例子: https://helpseotools.com/text-tools/remove-special-characters