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

时间:2011-07-02 04:52:00

标签: javascript special-characters

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

例如, abc's test#s 应输出为 abcs tests

13 个答案:

答案 0 :(得分:248)

您应该使用单个正则表达式的字符串替换功能。 假设有特殊字符,你的意思是不是字母,这是一个解决方案:

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

答案 1 :(得分:89)

您可以指定要删除的字符:

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

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

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

答案 2 :(得分:24)

第一种解决方案不适用于任何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,然后简单的Regexp将完成删除特殊字符的所有魔法。 (这也适用于中国人,你也可以通过Tromsø == Tromso)获得附带好处。

答案 3 :(得分:8)

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

[^\w\d\s]之类的东西将匹配除数字,字符和空格之外的任何内容。在JavaScript中查找语法只是一个问题。

答案 4 :(得分:8)

我尝试了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 '';
}

答案 5 :(得分:3)

全部搜索(字符||空格):

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

答案 6 :(得分:0)

点(。)可能不被视为特殊。我已经为Mozfet&amp;添加了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 '';
}

答案 7 :(得分:0)

尝试使用此

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

此处^克拉表示否定\ w表示[a-zA-Z0-9_]字字符,\ s表示空格 / [] / gi表示全局

答案 8 :(得分: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));

答案 9 :(得分:0)

尝试一下:

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

试试这个以获得与我这里有一个示例相同的结果,您可以对其进行编辑或使其更高效:

<!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>

答案 12 :(得分:-7)

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

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

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