@Evgeny1998

Как разделить строку в массив на текст и числа в JS?

Я пользуюсь сервисом daData, при вводе,к примеру мне пришла строка "г Москва, 1-й Волконский пер, 10д".
Вопрос: каким образом сделать так чтобы данная превратилась в массив из двух элементов ["г Москва, 1-й Волконский пер", "10д"]
Есть нюансы:
- город и улица приходят всегда
- адреса могут приходить совершенно разные.
- адрес может приходить без дома
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Нужно определить точные условия, которым должна удовлетворять входящая строка, это установит допустимое множество адресов. Как вы и сказали, может быть без дома, и подозреваю может быть без города или плюс страна и т.д.

Либо придётся попотеть, постоянно совершенствуя свою регулярку и скрипты по мере поступления входящих данных. Например, пришёл адрес, где две запятые подряд (это опечатка) - ага, нужно учесть это в регулярке. Или, например, запятая пропущена, но всё же можно догадаться по какому-то критерию, что она там должна быть - ага, и это нужно учесть. И так далее.

В целом, я бы сначала делил весь адрес на базовые компоненты (город, улица, дом), а потом уже отделил бы номер дома, склеив всё остальное. То есть самое простое, что приходит в голову, примерно такое:
let arr = str.split(",")
if (arr.length > 2) ....... // склеиваем все элементы, кроме последнего
Но для надёжности конечно лучше перепроверять, что улица имеет формат улицы, что номер дома содержит цифры и т.д.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ksnk
Если адрес совсем в свободной форме, то лучше доверить разбор адреса профессионалам Яндексу. У него есть Map api с функцией геокодирования https://yandex.ru/dev/maps/jsapi/doc/2.1/dg/concep...
В песочнице можно поиграться с тем, как расшифровываются кусочки адреса, введенного пользователем https://yandex.ru/dev/maps/jsbox/2.1/direct_geocode/
Например про адрес из первого сообщения была вот такая информация
Тип геообъекта: house
VM75:65 Название объекта: 1-й Волконский переулок, 10
VM75:66 Описание объекта: Россия, Москва
VM75:67 Полное описание объекта: Россия, Москва, 1-й Волконский переулок, 10
VM75:72 
Государство: Россия
VM75:73 Населенный пункт: Москва
VM75:74 Адрес объекта: Россия, Москва, 1-й Волконский переулок, 10
VM75:75 Наименование здания: -
VM75:76 Номер здания: 10
Правда работа с api ограниченно бесплатная, но для небольшого сайта с умеренным трафиком очень даже.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы