Полагаю, ваше выражение работает нормально, вы можете убрать флаг u
:
if(!preg_match("/^[-\p{L}\p{N} #&()!*,.;'\/\\\\]+$/s",$_POST["Description"])){
//error
}
Или, возможно, вы пытаетесь сделать,
if(!preg_match("/^[^-\p{L}\p{N} #&()!*,.;'\/\\\\]+$/s",$_POST["Description"])){
//error
}
, если выхочу исключить вещи.
Тест
$re = '/^[-\p{L}\p{N} #&()!*,.;\'\/\\\\]+$/m';
$str = 'abcd
abcd\\\\\\\\\\\\
&*&??
abc?
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
Вывод
array(2) {
[0]=>
array(1) {
[0]=>
string(4) "abcd"
}
[1]=>
array(1) {
[0]=>
string(10) "abcd\\\\\\"
}
}
ЕслиВы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в этой ссылке , как она будет сопоставляться с некоторыми примерами ввода.