PHP-код для удаления всего, кроме чисел

135

Я пытаюсь удалить все из строки, но только цифры (0-9).

Я думал, что это будет работать ..

echo preg_replace("[^0-9]","",'604-619-5135');

Но это отголосок "604-619-5135". Что мне не хватает ???

jeffkee
источник

Ответы:

277

Попробуй это:

preg_replace('/[^0-9]/', '', '604-619-5135');

preg_replace использует PCRE, которые обычно начинаются и заканчиваются на /.

Крис Эберле
источник
Внутреннее / двойное цитирование не имеет ничего общего с PCRE tho. Очевидно (в предыдущие дни (?flags)) люди, которые разработали / написали функцию / API, думали, что было бы хорошей идеей передавать флаги регулярных выражений в /flagsформе двойных кавычек вместо использования дополнительного параметра функции.
Qtax
6
@Qtax: хорошая мысль, да, я знаю, что именно отсюда мы получаем слово «grep» («g / re / p»)
Крис Эберле
109

Это для будущих разработчиков, вы также можете попробовать это. Просто тоже

echo preg_replace('/\D/', '', '604-619-5135');
Навнейль Найкер
источник
41
Здравствуйте, я разработчик из будущего. Это действительно хорошо послужило нашим потребностям. Спасибо.
Зесда
6
Я в будущем от Zesda и могу подтвердить, что это все еще помощь
myshadowself
3
Я вернулся в будущее, и я могу подтвердить, что они все еще не нашли лучшего пути.
Йон
4
Я самый последний разработчик из далекого будущего. Мне грустно говорить, что это больше не бесполезно. Вы, ребята, не должны были использовать столько пластиковых соломинок, поверьте мне, вы увидите, когда доберетесь сюда ... Если вы сделаете это.
Джереми
2
Просто к сведению: мы в 39-м веке все еще используем это.
user-44651
3

гораздо более практичный способ для тех, кто не хочет использовать регулярные выражения:

$data = filter_var($data, FILTER_SANITIZE_NUMBER_INT);

примечание: это работает и с номерами телефонов.

Alp Altunel
источник