PHP: регулярное выражение для замены из строки всего, кроме буквенно-цифровых символов - PullRequest
2 голосов
/ 13 июля 2010

Мне нужно очистить строку и убедиться, что она содержит только буквенно-цифровые символы.Я придумал следующий код, который по какой-то причине дает сбой

    $string = 'aaa`bbb!!';
    $string = preg_replace("#[^a-zA-z0-9]*#", "", $string);
    echo $string;die;   

Вывод, который я получаю, aaa`bbb, а я ожидаю aaabbb.Не могли бы вы помочь мне с этим.

Ответы [ 2 ]

10 голосов
/ 13 июля 2010

Это должна быть заглавная буква Z:

preg_replace("#[^a-zA-Z0-9]*#", "", $string);

Когда вы пишете A-z, это означает, что все символы находятся между A (значение ASCII 65) и z (значение ASCII 122). Это включает в себя обратную черту (значение ASCII 96) и несколько других, которые вам не нужны (подчеркивание, квадратные скобки, обратный слеш и тильда).

Вы также можете использовать + вместо * для многократного сохранения, заменяя пустую строку пустой строкой.

3 голосов
/ 13 июля 2010

Я думаю, что * не нужно, и вы могли бы упростить с \W.Просто попробуйте следующее:

$string = preg_replace("/[\W_]/", "", $string);

Кроме того, если вы просто хотите проверить - проверьте ctype_alnum.Это позволяет избежать накладных расходов библиотеки RegEx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...