PHP регулярное выражение, разбить строку по определенным символам одним запросом, крашится на символе точки

Есть номера телефонов в формате (строка):

0930001122, 0960001122

0930001122; 0960001122

0930001122.0960001122.

Соответственно, я хочу разбить на массив по символам: , . ; По запятой и точке с запятой оно заходит в массив, а вот по символу точки - не хочет. Инфа подтягивается с таблицы БД (тип строка)

$kitchen = preg_split("/,/", $obj->phone);  // разбиваю по запятой

if(count($kitchen) == 1) { 
    $kitchen = preg_split("/;/", $obj->phone);  // Если длина массива равна одному, то значит там или один телефон, или предыдущий сплит не сработал, пытаюсь разбить по точке с запятой.
}

if(count($kitchen) == 1) { 
    $kitchen = preg_split("/./", $obj->phone);  // Если длина массива равна одному, то значит там или один телефон, или предыдущие сплиты не сработали. Пытаемся разделить строку по точке.
}

При таком коде первые два формата телефонов разбиваются на массив, а третий просто записывается как 0, пустота.


Ответы (1 шт):

Автор решения: ArchDemon

Непонятно в чём у вас проблема. Код вполне рабочий, но можно сократить до:

$phone = '0930001122, 0960001122,0930001122; 0960001122; 0930001122.0960001122.';
$kitchen = preg_split("/(\s+)?[.;,](\s+)?/", $phone);
print_r($kitchen);

Получаем результат

Array
(
    [0] => 0930001122
    [1] => 0960001122
    [2] => 0930001122
    [3] => 0960001122
    [4] => 0930001122
    [5] => 0960001122
    [6] => 
)
→ Ссылка