Это должна быть заглавная буква Z:
preg_replace("#[^a-zA-Z0-9]*#", "", $string);
Когда вы пишете A-z
, это означает, что все символы находятся между A
(значение ASCII 65) и z
(значение ASCII 122). Это включает в себя обратную черту (значение ASCII 96) и несколько других, которые вам не нужны (подчеркивание, квадратные скобки, обратный слеш и тильда).
Вы также можете использовать +
вместо *
для многократного сохранения, заменяя пустую строку пустой строкой.