Как удалить все строки, кроме букв, цифр, пробела, восклицания и вопросительного знака из строки?

Как удалить все, кроме:

буквы, цифры, пробелы, восклицательные знаки, вопросительные знаки из строки?

Важно, чтобы этот метод поддерживал международные языки (UTF-8).

Ответ 1

Вы можете использовать regex

myString.replace(/[^\w\s!?]/g,'');

Это заменит все, кроме символа слова, пробела, восклицательного знака или вопроса.

Класс символов: \w означает символ слова, обычно [A-Za-z0-9_]. Обратите внимание на включение подчеркивания и цифр.

\s означает символ пробела. Он включает [ \t\r\n].

Если вы не хотите подчеркивания, вы можете использовать только [A-Za-z0-9].

myString.replace(/[^A-Za-z0-9\s!?]/g,'');

Для символов Unicode вы можете добавить в выражение что-то вроде \u0000-\u0080. Это исключает все символы в этом диапазоне Unicode. Вам нужно будет указать диапазон для символов, которые вы не хотите удалять. Вы можете увидеть все коды на Unicode Map. Просто добавьте символы, которые вы хотите сохранить, или диапазон символов.

Например:

myString.replace(/[^A-Za-z0-9\s!?\u0000-\u0080\u0082]/g,'');

Это позволит использовать все предыдущие символы, диапазон от \u0000-\u0080 и \u0082. Он удалит \u0081.

Ответ 2

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

Дэвид прав, регулярное выражение sachleen будет оставлять символы подчеркивания. rcdmk regex, модифицированный следующим образом, будет делать трюк, хотя, если вы беспокоитесь о международных символах, ситуация может стать намного сложнее.

var result = text.replace(/[^a-zA-Z0-9\s!?]+/g, '');

Это оставит новые строки и вкладки, а также пробелы. Если вы хотите избавиться от новых строк и вкладок, измените их на:

var result = text.replace(/[^a-zA-Z0-9 !?]+/g, '');

Ответ 3

text = "A(B){C};:a.b*!c??!1<>[email protected]#3"
result = text.replace(/[^a-zA-Z0-9]/g, '')

Должен возвращать ABCabc123

Сначала мы определяем текст как A B C a b c 1 2 3, но со случайными символами установите result как:

text.replace(...) где параметры:

     
  

/.../g, /.../: ^ означает обратное; не удалять буквы, которые:

         
    

a-z (строчные буквы), a-z (буквы UPPERCASE) и 0-9 (цифры)

             

g означает global, для удаления all соответствует не только первое совпадение

    
  

Второй параметр - это символ замены, мы устанавливаем его в пустую строку, чтобы он просто сохранял указанную строку. если указано , он вернет это: "A B C a b c 1 2 3"

Ответ 4

Вы можете попробовать с регулярным выражением, например: var cleaned = someString.replace(/[^a-zA-Z0-9! ]+/g, "");