Убрать пробелы.

Special_Jacky

Новичок
Ситуация следующая.
есть номера телефонов формата +7 723 226 23 66 нужно сделать 77232262366

function check($str)
{
$num = str_replace(array('_', '-', '—', ' ', '+'), '', trim($str));
$numbers = preg_replace("/\s{2,}/",' ',$num);

return $numbers;
}

Из номера делает 7 723 2262366, как убрать остальные пробелы?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Почему {2,}? И вообще тут лучше убрать все, кроме цифр, а это [^0-9], не?
 

AnrDaemon

Продвинутый новичок
ЧТО вам объяснить? Что ваш код даже не загрузится в интерпретатор? Объясняю - ваш код не является корректным и компиляцию не пройдёт.
Или мне употребить слова, которые я обычно употребляю при разговоре об ошибках, допущенных в коде программистами?
Нет, мне не впервой оказаться забаненным на форуме, но ситуация того не стоит.
 

Special_Jacky

Новичок
ЧТО вам объяснить? Что ваш код даже не загрузится в интерпретатор? Объясняю - ваш код не является корректным и компиляцию не пройдёт.
Или мне употребить слова, которые я обычно употребляю при разговоре об ошибках, допущенных в коде программистами?
Нет, мне не впервой оказаться забаненным на форуме, но ситуация того не стоит.
скажи как правильно написать выражение?
 

keltanas

marty cats
peektoseen
PHP:
<?php
namespace keltanas\Module\Checker;

class Checker
{
    public function check($value)
    {
        return preg_replace('/\D/','',$value);
    }
}

printf("Result: %s", (new Checker)->check("+7 723 226 23 66"));
 

AmdY

Пью пиво
Команда форума
Если использовать объекты, то тогда нужно в конструктор перадавать параметр, а не в метод, чтобы можно было затем дёрнуть $this, а иначе последнее время я предпочитаю статик метод.
PHP:
class Checker
{
    protected $value;
    public function __constructor($value) {
        $this->value = trim($value);
    }
    public function check()
    {
        return preg_replace('/\D/','',$this->value);
    }
}

printf("Result: %s", (new Checker("+7 723 226 23 66"))->check());
 

WMix

герр M:)ller
Партнер клуба
сарказм это хорошо, а ничего страшного что + утерян? попробуй догадаться набирать "8 гудок 10" или нет?
кстати если дописать до конца и назвать класс/функцию "phone filter", то конструкция может обрести смысл.
 
Последнее редактирование:
  • Like
Реакции: AmdY

Absinthe

жожо
WMix плюс подразумевается всегда, скорее всего.
Но имхо писать его в базу надо - это часть номера.
 

WMix

герр M:)ller
Партнер клуба
Absinthe догадайся что эти программисты напридумывали ;)
 
Последнее редактирование:

keltanas

marty cats
WMix
Как овнер ставит задачу, так и решаем ))
AmdY
Это просто 2 разных подхода. Я сужу с той точки зрения, что класс можно зарегистрировать как сервис и пользоваться для фильтрации.
Тогда в конструкторе было бы разумно принимать, например, регулярное выражение, чтобы настроить его. А сам телефон в метод.
PHP:
$container['checker'] = new Checker('/\D/');
printf("Result: %s", $container['checker']->check("+7 723 226 23 66"));
Но, если не использовать его как сервис, то тогда совсем теряется смысл, ибо:
PHP:
printf("Result: %s", preg_replace('/\D/','','+7 723 226 23 66'));
то же самое, только без оверхеда
 
Сверху