Вы соответствуете слишком длинному тексту.Это обычно случается и со мной при разборе очень длинных субпаттернов.Вот некоторые вещи, которые вы можете попробовать:
Удалите скобки:
$result = preg_match('/^[a-zA-Z0-9 \n\r,!@#\$\.\+\-%\^&\(\)~`\'":;_=\?\\/\|\<\>\*\{\}]+$/',$variable);
Это может не сработать, поскольку оно все равно должно соответствовать очень длинному тексту.Еще один способ сделать это:
Сделать отрицательное совпадение, которое соответствует только одному символу, которого нет в вашем наборе, и убедиться, что оно не совпадает.
$result = preg_match('/[^a-zA-Z0-9 \n\r,!@#\$\.\+\-%\^&\(\)~`\'":;_=\?\\/\|\<\>\*\{\}]/',$variable);
$valid = !$result && strlen($variable) > 0;
PS Ваш код работает нормальнов моем компьютере.