【发布时间】:2011-09-27 03:57:16
【问题描述】:
我想使用 JavaScript 从字符串中删除除空格以外的所有特殊字符。
例如,
abc's test#s
应该输出为
abcs tests.
【问题讨论】:
-
特殊字符是怎么定义的?
标签: javascript special-characters
我想使用 JavaScript 从字符串中删除除空格以外的所有特殊字符。
例如,
abc's test#s
应该输出为
abcs tests.
【问题讨论】:
标签: javascript special-characters
你想从字符串中删除哪些特殊字符,准备一个列表,然后使用 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, ""));
【讨论】:
str.replace(/[^a-zA-Z0-9 ]/g, "");注意0-9和]之间有一个空格
pspanspanstrongItem SKUstrongnbspspanspanKBRspanspanpp This 好一点。
我不懂 JavaScript,但不能使用正则表达式吗?
[^\w\d\s] 之类的内容将匹配除数字、字符和空格之外的任何内容。在 JavaScript 中找到语法只是一个问题。
【讨论】:
您可以指定要删除的字符:
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
或者,要更改除数字和字母以外的所有字符,请尝试:
string = string.replace(/[^a-zA-Z0-9]/g, '');
【讨论】:
/[^a-zA-Z0-9]/g
.text().replace(/[ ()]/g, '')中的()和whitespaces
第一个解决方案不适用于任何 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:我在进行模糊搜索时找到了原始解决方案。如果您还尝试删除特殊字符以实现搜索功能,则有更好的方法。使用任何transliteration library,它只会从拉丁字符生成字符串,然后简单的正则表达式将完成删除特殊字符的所有魔法。 (这也适用于中国人,您还可以通过制作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 '';
}
【讨论】:
reg。
点 (.) 可能不被认为是特殊的。我在 Mozfet 和 Seagull 的回答中添加了 OR 条件:
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, ""));
【讨论】:
ąčęėįšųūž 这样的字母在某些情况下可能不是“特殊”字符,它们将被删除。还有所有带有本地字母的日语/中文和其他语言。此代码将仅保留英文字母 a-z 和 A-Z。
试试这个以获得相同的结果我在这里有一个示例,您可以对其进行编辑或使其更高效:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Validation example</title>
</head>
<body>
<div>
<!-- optional form element for HTML5 Validation on submit
- the Vanilla js code below can work well without a form element
=====================================================
So you can decide to use the HTML5 validation on top of JS validation when you use a form with a submit button
But if you use the input element only then you have to rely on the js validation only
-->
<form id="search-form">
<input type="text" pattern="[A-Za-z\s0-9]{3,}" title="Only letters, numbers and spaces are allowed" placeholder="Search" name="search" id="search-input">
<!-- optional submit button if using a form -->
<button type="submit">Submit</button>
</form>
</div>
<script>
window.onload = function () {
var inputElementRef = document.getElementById("search-input"); //use id selector for precise selection in a large html document
var inputSearchValue = "";
inputElementRef.addEventListener("keydown", function (e) {
inputSearchValue = e.target.value;
// replace invalid characters if you are not using HTML5 validation this will ensure the value
// is always the expected string format
inputSearchValue = inputSearchValue.replace(/[^a-zA-Z\s]/g,"");
});
// whenever you change the value you can retrieve it from var inputSearchValue
// For example
var handleFormSubmit = function (e) {
e.preventDefault();
console.log('inputSearchValue', inputSearchValue)
}
var optionalSearchFormRef = document.getElementById("search-form");
optionalSearchFormRef.addEventListener("submit", handleFormSubmit);
}
</script>
</body>
</html>
【讨论】: