Регулярное выражение для исключения [закрытых] специальных символов

31
задан TylerH 21 August 2019 в 20:53
поделиться

7 ответов

Я бы просто перечислил белый список символов.

^[a-zA-Z0-9äöüÄÖÜ]*$

Создание черного списка одинаково просто с регулярным выражением, но вам может понадобиться чтобы добавить намного больше символов - в юникоде много китайских символов ...;)

^[^<>%$]*$

Выражение [^ (здесь много символов)] просто соответствует любому символу, которого нет в списке.

40
ответ дан 27 November 2019 в 21:56
поделиться

Чтобы исключить определенные символы (<,>,% и $), вы можете создать регулярное выражение, например:

[<>%\$]

Это регулярное выражение будет соответствовать всем входным данным, в которых есть черный список символов. Скобки определяют класс символов, и перед знаком доллара необходимо указывать символ \, потому что знак доллара имеет особое значение в регулярных выражениях.

Чтобы добавить больше символов в черный список, просто вставьте их в скобки; порядок не имеет значения.

Согласно некоторой документации Java для регулярных выражений , вы можете использовать выражение следующим образом:

Pattern p = Pattern.compile("[<>%\$]");
Matcher m = p.matcher(unsafeInputString);
if (m.matches())
{
    // Invalid input: reject it, or remove/change the offending characters.
}
else
{
    // Valid input.
}
8
ответ дан 27 November 2019 в 21:56
поделиться

Обычно лучше использовать разрешенные символы белого списка, чем запрещенные символы черного списка. как с точки зрения безопасности, так и с точки зрения простоты реализации.

Если вы пойдете по черному списку, вот пример, но будьте осторожны, синтаксис не прост.

http: // groups. google.com/group/regex/browse_thread/thread/0795c1b958561a07

Если вы хотите добавить в белый список все символы ударения, возможно, использование диапазонов Юникода поможет? Проверьте эту ссылку.

http://www.regular-expressions.info/unicode.html

5
ответ дан 27 November 2019 в 21:56
поделиться

Я думаю, это зависит от того, на какой язык вы ориентируетесь. В общем, что-то вроде этого должно работать:

[^<>%$]

Конструкция «[]» определяет класс символов, который будет соответствовать любому из перечисленных символов. Помещение « ^ » в качестве первого символа отменяет совпадение, т. Е. Любой символ ДРУГОЙ, чем один из перечисленных.

Вам может понадобиться экранировать некоторые символы в пределах «[]», в зависимости от на каком языке / движке регулярных выражений вы используете.

5
ответ дан 27 November 2019 в 21:56
поделиться

Вы действительно хотите занести в черный список определенные символы или, скорее, внести в белый список разрешенные символы?

Я предполагаю, что Вы действительно хотите последнее. Это довольно просто (добавьте любые дополнительные символы в белый список в группу [\ -] ):

^(?:\p{L}\p{M}*|[\-])*$

Редактировать: Оптимизировать шаблон с учетом комментариев из комментариев

2
ответ дан 27 November 2019 в 21:56
поделиться

Почему вы считаете регулярное выражение лучшим инструментом для этого? Если ваша цель - определить, присутствует ли в строке недопустимый символ, тестирование каждого символа в цикле будет проще и эффективнее, чем построение регулярного выражения.

1
ответ дан 27 November 2019 в 21:56
поделиться

Я сильно подозреваю, что будет проще составить список символов, которые разрешены против тех, которые разрешены это не так - и как только у вас есть этот список, синтаксис регулярных выражений становится довольно простым. Так что опустите меня как еще один голос за "белый список".

0
ответ дан 27 November 2019 в 21:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: