$latitude = 0.0;
$longitude = 0.0;
- $parts = explode(',', $text);
+ // Убираем префикс типа доставки
+ $cleaned = preg_replace('/^(Доставка|Самовывоз)\s*:\s*/ui', '', $text);
+
+ // Убираем дату/время: "сегодня, 2 марта 2026 в 17:30—18:00" и аналогичные паттерны
+ $cleaned = preg_replace('/(?:сегодня|завтра|послезавтра)\s*,?\s*/ui', '', $cleaned);
+ $cleaned = preg_replace('/\d{1,2}\s+[а-яА-Я]+\s+\d{4}/u', '', $cleaned);
+ $cleaned = preg_replace('/[вс]\s+\d{1,2}:\d{2}(?:—\d{1,2}:\d{2})?\s*/u', '', $cleaned);
+
+ // Убираем служебные фразы, которые не являются адресом
+ $cleaned = preg_replace('/Уточните\s+адрес\s+доставки\s+у\s+получателя/ui', '', $cleaned);
+
+ // Чистим оставшиеся запятые и пробелы
+ $cleaned = preg_replace('/,\s*,/', ',', $cleaned);
+ $cleaned = trim($cleaned, " ,\t\n\r");
+
+ if ($cleaned === '') {
+ return compact('city', 'street', 'house', 'latitude', 'longitude');
+ }
+
+ $parts = explode(',', $cleaned);
$parts = array_map('trim', $parts);
+ $parts = array_values(array_filter($parts, fn($p) => $p !== ''));
$count = count($parts);
if ($count >= 3) {
$city = $parts[$count - 3];
$street = $parts[$count - 2];
$house = $parts[$count - 1];
+ } elseif ($count === 2) {
+ $city = $parts[0];
+ $street = $parts[1];
+ } elseif ($count === 1) {
+ $city = $parts[0];
}
switch (mb_strtolower($city)) {
break;
}
- return [
- 'city' => $city,
- 'street' => $street,
- 'house' => $house,
- 'latitude' => $latitude,
- 'longitude' => $longitude,
- ];
+ return compact('city', 'street', 'house', 'latitude', 'longitude');
}