Как я могу проверить с регулярным выражением, что строка содержит только определенные допустимые символы?

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

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

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

Помимо вышеизложенного, они также должны быть разрешены:

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

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

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

Сломать:

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

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

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

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

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

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

 ^[\sa-zA-Z0-9åäö&()+%/*$€é,.'"-]*$ 

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

В PHP:

 if (preg_match('#^[\sa-zA-Z0-9åäö&()+%/*$€é,.\'"-]*$#i', $subject)) { # Successful match } else { # Match attempt failed } 

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

В этом примере – я просто говорю, что «этот материал не разрешен»

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

PHP:

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

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


Редактировать:

Более экспансивный

Эта переменная регулярного выражения содержит все символы с верхним и нижним регистром. Их в формате 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);