簡體   English   中英

使用 JavaScript 從字符串中刪除除空格外的所有特殊字符

[英]Remove all special characters except space from a string using JavaScript

我想使用 JavaScript 從字符串中刪除除空格外的所有特殊字符。

例如abc's test#s應該 output as abcs tests

您應該使用單個正則表達式替換 function 字符串。 假設通過特殊字符,您的意思是任何不是字母的東西,這是一個解決方案:

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

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

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

或者,要更改除數字和字母之外的所有字符,請嘗試:

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

第一個解決方案不適用於任何 UTF-8 字母表。 (它將剪切文本,例如Привіт)。 我設法創建了一個不使用 RegExp 的 function 並在 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:我在進行模糊搜索時找到了原始解決方案。 如果您還嘗試刪除特殊字符以實現搜索功能,則有更好的方法。 使用任何只從拉丁字符生成字符串的音譯庫,然后簡單的正則表達式將完成刪除特殊字符的所有魔法。 (這也適用於中國人,您還可以通過制作Tromsø == Tromso獲得附帶好處)。

我不知道 JavaScript,但不能使用正則表達式嗎?

[^\w\d\s]之類的內容將匹配除數字、字符和空格之外的任何內容。 在 JavaScript 中找到語法只是一個問題。

搜索所有不(單詞字符||空格):

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

我嘗試了 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 '';
}

嘗試使用這個

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

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

點 (.) 可能不被認為是特殊的。 我在 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 '';
}

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

試試這個以獲得相同的結果我在這里有一個示例,您可以對其進行編輯或使其更高效:

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

您要從字符串中刪除哪些特殊字符,准備它們的列表,然后用戶 javascript 替換 function 以刪除所有特殊字符。

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

或者您可以對整個字符串運行循環並將單個字符與 ASCII 代碼進行比較並重新生成一個新字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM