Jump to content
  • 0

Работа со строками


fiver
 Share

Question

Здравствуйте!

Столкнулся с задачей переноса данных из exel в уже существующую БД.

Да вот незадача, нихрена не умею работать со строками.

Возникает куча вопросов.

Я понимаю, что работа со стоками это важный атрибут php, но вот с опытом беда.

Задачка такая, преобразовать строку в переменные которые я смог бы внести в БД.

Строка имеет вид:

$value = "2;Цветной бульвар м.;5п;Печатников пер.;3;2/6 М;70,6/40/15;Б;П+Г;"

что к чему: 2- кол-во комнат, 5п - 5 минут пешком от метро, 2/6 М - 2 этаж 6 эт.зд. монолитного, 60/40/15 - площадь общ./жил/кухня, Б - балкон, П+Г (лифты пассажирски и грузовой).

Ну там еще куча всего в строке, но хотя бы разобраться с этим.

надо получить:

$kol-komnat = 2;

$metro = 'Цветной бульвар';

$minut-ot-metro = 5;

$kak = 'пешком';

$ul = 'Печатников пер.';

$dom = '3';

$etazh = 2;

$etazhnost = 6;

$zdanie = 'monolit';

$sq-ob = 60;

$sq-zh = 40;

$sq-kuh = 15;

$balkon = 'yes';

$lift-pas = 'yes';

$lift-gruz = 'yes';

ну и т.д, т.п.

Готов разобрать каждый шаг отдельно.

Например шаг 1 - $kol-komnat = 2;

Я сделал так:

$kkom = substr($value, 0, strpos($value,';'));

т.е. присвоил значение с 0 символа до первой ;

На этом знания мои иссякли.

Что бы извлечь метро, надо вернуть строку от первой ; до второй ;, потом убрать м., потом убрать пробелы с начала и конца.

Все могу, кроме как вернуть значение второй ;

Link to comment
Share on other sites

Recommended Posts

  • 0

Человеки, помогите!

Возникла задача, убрать телефонные номера из текста.

Есть у кого готовые регулярные выражения.

А то я погуглил и готового не нашел.

Короче, некоторые пользователи вбивают телефоны не в контактную инфу, а в описание.

Вбивают по разному:

8-916-555-66-77

89265556677

+7(966)555-55-55

8(903)5557788

555-33-11

ну и так далее, кому чего в голову взбредет. Могут 2 и даже 3 телефона вбить.

Задача из строки с текстом и цифрами, убрать именно телефоны.

Что то есть в них общее.

от 7 до 11 цифр, и символы +()-

Как то так наверное.

даже не представляю как подступиться.

Link to comment
Share on other sites

  • 0

это не выход.. много может порезать нужной информации, например, разные серийные или регистрационные номера. Универсального способа нет. нужно для всех случаем писать своё правило, т.к. у формата просто нет правил или писать какое-то общее.

Т.е. мы знаем что:

телефон всегда начинатся

- на плюс

- на цифру

- на открывающуюся скобку при условии что есть закрывающаяся и не в самом конце

Телефон всегда заканчивается

- на цифру

Внутри могут быть

- цифры

- тире

- пробел

- скобки

Длина может быть

- минимальная только цифры 5 знака: 00000

- максимальная 22 знака: +0а0a0a0a0a0a0a0a0a0a0

Перед и после номера не должна идти цифра

Что-то где-то так, но это опять же всё условно

Link to comment
Share on other sites

  • 0

это не выход.. много может порезать нужной информации, например, разные серийные или регистрационные номера. Универсального способа нет. нужно для всех случаем писать своё правило, т.к. у формата просто нет правил или писать какое-то общее.

Т.е. мы знаем что:

телефон всегда начинатся

- на плюс

- на цифру

- на открывающуюся скобку при условии что есть закрывающаяся и не в самом конце

Телефон всегда заканчивается

- на цифру

Внутри могут быть

- цифры

- тире

- пробел

- скобки

Длина может быть

- минимальная только цифры 5 знака: 00000

- максимальная 22 знака: +0а0a0a0a0a0a0a0a0a0a0

Перед и после номера не должна идти цифра

Что-то где-то так, но это опять же всё условно

Продолжу мысль.

если в скобках 3 цифры, а потом на еще 7 цифр на 10 следующих символов и разбавлены пробелами или -, то 100% телефон.

если после +7, на 16 символов 10 цифр и разбавлено проб.-() то тоже телефон

тоже после 8

Вот хотя бы как такое реализовать?

Link to comment
Share on other sites

  • 0

с одного форума + еще ссылка:


if (preg_match("/([a-z0-9_\-\.])+@([a-z0-9_\-\.])+\.([a-z\.]{2,6})/",$text) || preg_match("/(\+7|8|\+38|38)(\d+|-|\d{3}-)(\d{3})(-\d{3}|-\d{2}|\d+)(-\d{4}|-\d{2}-\d{2}|-\d{2}|\d{2}-\d{2}|\d{2,4})/",$text)){
echo "В это поле нельзя вводить телефонные номера!";
}

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

Link to comment
Share on other sites

  • 0

но мое имхо - это все бред полнейший

100% да(!) :) А вот регуларка какая то не понятная: первая часть явно проверяет мыло

fiver, не заморачивайся. Ну если только для практики в регулярках..

Link to comment
Share on other sites

  • 0

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

rus, твоя регулярка ловит только телефоны россии и украины :) и то только написанные в установленном порядке.. Вот например, телефон районного центра 8(47253)23321, уже проскочит

Link to comment
Share on other sites

  • 0

на хабре где-то была статья про регулярки для телефонных номеров

Регулярки не проверяют валидность номеров.

Регуляркой можно только проверить наличие допустимых символов: +-()012345679

Link to comment
Share on other sites

  • 0
- Папа скажи мне, а как нам защитить поле от ворон?

- Сынок, можно к каждому подсолнуху поставить пугало.

- Так это сколько же пугало понадобиться???

- Ну так по этому мы их и не ставим. А сколько ворона скушает то!?

:rolleyes:

  • Like 1
Link to comment
Share on other sites

  • 0

Avalon4eg, валидация и поиск - это совершенно разные задачи. Поиск намного сложнее, а правила валидации это всего-лишь малая часть

да не, не в этом дело, к приведенному коду по ссылке на хабр не сложно дабавить preg_match и модифицировать слегка, тут вопрос как раз в том уместно ли это, ну и еще нужен как минимум универсальность кода, а в этом будет баальшой затык, выискивать в тексте телефон, который к тому же может выглядеть и таким вот образом: + 7 (926) три-семь5 два 8 9-ноль а, как вам такое?

Link to comment
Share on other sites

  • 0

дело именно в этом.. Можно искать телефоны по правила, а можно сделать правило и искать телефоны. Разница большая. Например, правило то что мы начинаем писать телефон (в современном мире) с +7 или 8 (применимо к России), но некоторые просто пишут региональный телефон, некоторые с кодом но без +7 и 8, некоторые код в скобки закидывают, некоторые через пробел... т.е. гемор, гемор, гемор :)

И даже если это всё сделать, нужно ещё предусмотреть маленький момент.. Сколько займёт времени чтобы регулярка "почистила" код? А может столько что пользователю проще закрыть страницу :)

Хотя есть ещё одним не мало важный вопрос: а где искать телефон? Например в фамилии цифры не бывают :)

Link to comment
Share on other sites

  • 0

Можно сначала прогнать переменную через регулярку которая найдет все что не буквы (т е все что входит в интервал [-+\(\)0-9]), а потом полученное уже проверять на валидность

-вариант "плюс 7 (962 скобка закрылась три-семь5 два 8 9-ноль" конечно тут тоже ен учитывается =)

Edited by Avalon4eg
Link to comment
Share on other sites

  • 0

Ну вы уже вообще разошлись.

три два один, это для тех кто хочет обойти защиту.

Дело обстоит так. Я из exel загружаю данные в БД.

Там есть поле, описание. Обычно несколько предложений.

Иногда в этом описании встречаются номера телефонов, в основном в начале текста или в конце.

Еще там встречаются емэйлы, и адреса сайтов (но с этим проблемм нет).

Телефоны которые попадаются, написаны вполне приемлемо, примеры я уже писал.

код, код оператора, телефон.

Ну там встречаются еще тере, скобки пробелы. Все.

Попадаются и цифры в тексте (вес, размер, площадь, длинна и т.п.), так что все цифры убирать нельзя.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy