Посмотрите на диапазоны символов:
@[!-%'-?A-~]+@
Это исключит символы & (\0x26)
и @ (0x40)
.
Посмотрев ASCII Table , вы увидите, как это работает:
Восклицательный знак - это первый символ в наборе ASCII, который не является пробелом. Затем он будет соответствовать всему, вплоть до символа %
, который непосредственно предшествует амперсанду. Затем следующий диапазон до символа @
, который лежит между ?
и A
. После этого мы сопоставляем все до конца стандартного набора символов ASCII, который является ~
.
Обновление
Чтобы сделать вещи более читабельными, вы также можете рассмотреть возможность сделать это в два этапа:
Сначала отфильтруйте все, что находится за пределами диапазона ASCII по умолчанию.
@[!-~]+@
На втором шаге отфильтруйте нежелательных символов или просто сделайте str_pos
для символов.
В конце вы можете сравнить его с тем, что вы начали, чтобы увидеть, содержит ли он какие-либо нежелательные символы.
Вместо этого вы также можете использовать регулярное выражение, подобное этому, для второго шага.
/[^@&]+/
Шаги являются взаимозаменяемыми, и выполнение str_pos для @
или &
в качестве первого шага для выявления плохих символов может быть более эффективным с точки зрения производительности.