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


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

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

8 84

8 ответов:

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

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

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

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

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

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

первое решение не работает для любого алфавита 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;
}

обновление: обратите внимание, что это решение работает только для языков, где есть маленькие и заглавная буква. В таких языках, как китайский, это не будет работать.

я попробовал очень творческое решение Чайки, но обнаружил, что он рассматривал числа также как специальные символы, которые не соответствовали моим потребностям. Итак, вот моя (безотказная) настройка решения Чайки...

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

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

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

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

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

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

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

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

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