Как я могу проверить с помощью регулярного выражения, что строка содержит только определенные разрешенные символы? - PullRequest
10 голосов
/ 07 мая 2010

Мне нужно специальное регулярное выражение, и я не имею никакого опыта в них, поэтому я обращаюсь к вам, ребята, по этому вопросу.

Мне нужно проверить поле заголовка объявления, чтобы оно не имело особого значения.символов в нем почти.

Допускаются только буквы и цифры, а также три шведские буквы å, ä, ö (верхний или нижний регистр).

Помимо вышесказанного, они должнытакже допускается:

  • Знак "&".
  • Круглые скобки "()"
  • Математические знаки "-", "+", "%","/", "*"
  • Знаки доллара и евро
  • Одно письмо с акцентом: "é".// Требуется только один
  • Двойные кавычки и одинарные кавычки.
  • Запятая "," и точка "."знаки

Ответы [ 5 ]

20 голосов
/ 07 мая 2010

Попробуйте это:

^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$

Разбивка:

^ = соответствует началу строки

[...]* = соответствует любым символам (или диапазонам) в скобках один или несколько раз

$ = соответствует концу строки

Обновлено со всеми предложениями из комментариев. Спасибо, ребята!

1 голос
/ 16 августа 2018

В принятом ответе есть ошибка безопасности:

^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$

Это создаст истинный ответ для пустых строк, так как * для 0 или более вхождений.

Вот более безопасная версия:

^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]+$

+ отвечает true на 1 или более случаев.

Более подробную информацию можно найти на https://regexr.com/

1 голос
/ 07 мая 2010

PHP имеет множество функций, которые могут помочь с проверкой текста.Вы можете найти их более подходящими, чем прямое регулярное выражение.Рассмотрим strip_tags(), htmlspecialchars(), htmlentities()

Также, если вы работаете> PHP5.2, вы можетеИспользуйте превосходные функции Filter , которые были разработаны именно для вашей ситуации.

0 голосов
/ 07 мая 2010
^[\sa-zA-Z0-9åäö&()+%/*$€é,.'"-]*$

будет соответствовать всем необходимым символам.

В PHP:

if (preg_match('#^[\sa-zA-Z0-9åäö&()+%/*$€é,.\'"-]*$#i', $subject)) {
 # Successful match
} else {
 # Match attempt failed
}
0 голосов
/ 07 мая 2010

Эй, приятель, это действительно очень, очень просто. Просто сделайте регулярное выражение вместо всего, что вам не нужно ...

В этом примере - я просто говорю: «это не разрешено»

Более конкретно, он говорит: «Если его нет в этом совпадении с регулярным выражением, замените этот символ пустой строкой.

PHP:

$result = preg_replace('#([^a-zA-Z0-9£()+=%/*$,.])#imx', '', $subject);

если в разделе, где у вас есть a-zA-Z0-9£()+=%/*$, просто добавьте символ, который вы хотите передать своему регулярному выражению, и будете допущены в посте.


Edit:

Более обширный

Это выражение регулярного выражения содержит все символы в верхнем и нижнем регистре. Они в формате ASCII, так как я не знаю, как их написать!

$result = preg_replace('#([^a-zA-Z0-9£()+=%/*$,.\x99\xBC\xBD\xBE\xC0\xC1\xC2\xC3\xC4\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD1\xD2\xD3\xD4\xD5\xD6\xE0\xE1\xE2\xE3\xE4\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF9\xFA\xFB\xFC\xFD])#imx', '', $subject);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...