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

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

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

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

4 ответов


вы можете использовать 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. Вы должны указать диапазон для символов не хотите удалить. Вы можете увидеть все коды на Юникод Карте. Просто добавьте символы, которые вы хотите сохранить, или диапазон символов.

например:

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

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


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

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

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

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

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

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

должен возвратить ABCabc123

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

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

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

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

g означает глобальный, чтобы удалить все матчи не только первого матча

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


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