Подтвердить что ты не робот

Удалите все специальные символы, кроме пробела из строки, используя JavaScript

Я хочу удалить все специальные символы, кроме пробела, из строки с использованием JavaScript.

Например, abc test#s должен выводиться как abcs tests.

4b9b3361

Ответ 1

Вы должны использовать функцию замены строки с одним регулярным выражением. Предполагая специальными символами, вы имеете в виду все, что не письмо, вот решение:

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

Ответ 2

Вы можете сделать это, указав символы, которые хотите удалить:

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

В качестве альтернативы, чтобы изменить все символы, кроме цифр и букв, попробуйте:

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

Ответ 3

Первое решение не работает для любого алфавита UTF-8. (Это будет вырезать текст, такой как Привіт). Мне удалось создать функцию, которая не использует RegExp и использует хорошую поддержку UTF-8 в движке JavaScript. Идея проста, если символ равен в верхнем и нижнем регистре, это специальный символ. Единственное исключение сделано для пробелов.

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

Ответ 4

Я не знаю JavaScript, но разве не возможно использовать регулярное выражение?

Что-то вроде [^\w\d\s] будет соответствовать всем, кроме цифр, символов и пробелов. Было бы просто найти синтаксис в JavaScript.

Ответ 5

Я попробовал 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 '';
}

Ответ 6

искать не все (символы слова || пробел):

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

Ответ 7

точка (.) не может считаться специальной. Я добавил условие OR для ответов 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 '';
}

Ответ 8

Чьи специальные символы вы хотите удалить из строки, подготовьте их список и затем замените функцию javascript для удаления всех специальных символов.

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

или вы можете запустить цикл для целой строки и сравнить одиночный символ с кодом ASCII и восстановить новую строку.