Я хотел бы RegExp, который удалит все специальные символы из строки. Я пытаюсь что-то вроде этого, но это не работает в IE7, хотя это работает в Firefox.
var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";
for (var i = 0; i < specialChars.length; i++) {
stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}
Подробное описание RegExp также будет полезно.
javascript
regex
special-characters
Тимоти Рул
источник
источник
Ответы:
Как уже упоминалось в комментариях, это проще сделать в виде белого списка - замените символы, которых нет в вашем безопасном списке.
Символ caret (
^
) - это отрицание множества[...]
,gi
скажем, глобального и без учета регистра (последний немного избыточен, но я хотел бы упомянуть об этом), а в этом примере списком надежных отправителей являются цифры, символы слова, подчеркивания (\w
) и пробел (\s
).источник
Обратите внимание, что если вы все еще хотите исключить набор, включая такие элементы, как косая черта и специальные символы, вы можете сделать следующее:
обратите особое внимание, что для того, чтобы включить символ «минус», вам необходимо экранировать его с обратной косой чертой, как у последней группы. если вы этого не сделаете, он также выберет 0-9, что, вероятно, нежелательно.
источник
?
часть набора символов вперед. в этом списке перечислены символы, которые вы хотите удалить, поэтому исключение их из удаления будет включать их в окончательный результат.Простое регулярное выражение Javascript не обрабатывает буквы Unicode .
Не используйте
[^\w\s]
, это приведет к удалению букв с акцентом (например, àèéìòù), не говоря уже о кириллице или китайском, буквы, приходящие с таких языков, будут полностью удалены.Вы действительно не хотите удалять эти буквы вместе со всеми специальными символами. У вас есть два шанса:
например:
[^èéòàùì\w\s]
.\p{...}
синтаксис.источник
Первое решение не работает для любого алфавита UTF-8. (Это будет вырезать текст, такой как Їжак). Мне удалось создать функцию, которая не использует RegExp и использует хорошую поддержку UTF-8 в движке JavaScript. Идея проста, если символ равен в верхнем и нижнем регистре, это специальный символ. Единственное исключение сделано для пробелов.
Обновление: обратите внимание, что это решение работает только для языков, где есть маленькие и заглавные буквы. На таких языках, как китайский, это не сработает.
Обновление 2: я пришел к исходному решению, когда работал над нечетким поиском. Если вы также пытаетесь удалить специальные символы для реализации функции поиска, есть лучший подход. Используйте любую библиотеку транслитерации, которая выдаст вам строку только из латинских символов, а затем простой Regexp сделает всю магию удаления специальных символов. (Это будет работать и для китайцев, и вы также получите дополнительные преимущества, сделав
Tromsø
==Tromso
).источник
Я использую RegexBuddy для отладки своих регулярных выражений, так как почти все языки очень полезны. Чем копировать / вставить для целевого языка. Потрясающий инструмент и не очень дорогой.
Поэтому я скопировал / вставил ваше регулярное выражение, и ваша проблема заключается в том, что [,] являются специальными символами в регулярном выражении, поэтому вам нужно избегать их. Таким образом, регулярное выражение должно быть: /!@#$^&%*()+=-[\x5B\x5D]\/ndomcasts|:<>?,./im
источник
почему вы не делаете что-то вроде:
чтобы проверить, содержат ли ваши входные данные какой-либо специальный символ
источник
èéòàùì
а в некоторых случаях это не будет решениемstr.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")
Я так и сделал. Но есть некоторые люди, которые сделали это намного проще, какstr.replace(/\W_/g,"");
источник
\W
содержат некоторые символы. Но зачем вам отфильтровывать числа? Это не специальные символы.