Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Извлечь телефоны и имя пользователя из строки
 
 автор: starpom   (26.12.2010 в 16:53)   письмо автору
 
 

Подскажите как из такой строки :
541-87-42; 067-205-47-01 Василий
получить такой набор переменных

$phone = 5418742;
$phone1 = 0672054701;
$name = "Василий";


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

  Ответить  
 
 автор: cheops   (26.12.2010 в 17:26)   письмо автору
 
   для: starpom   (26.12.2010 в 16:53)
 

Телефонов всегда два? Или их количество произвольное?

  Ответить  
 
 автор: starpom   (26.12.2010 в 18:07)   письмо автору
 
   для: cheops   (26.12.2010 в 17:26)
 

от одного до трех

  Ответить  
 
 автор: cheops   (26.12.2010 в 18:12)   письмо автору
 
   для: starpom   (26.12.2010 в 18:07)
 

В имени пользователя пробела быть не может?

  Ответить  
 
 автор: starpom   (26.12.2010 в 18:25)   письмо автору
 
   для: cheops   (26.12.2010 в 18:12)
 

Может и тогда понадобиться создавать переменные $otchestvo и $familia например

  Ответить  
 
 автор: Trianon   (26.12.2010 в 18:29)   письмо автору
 
   для: starpom   (26.12.2010 в 18:25)
 

>Может и тогда понадобиться создавать переменные $otchestvo и $familia например

:-)))

  Ответить  
 
 автор: starpom   (26.12.2010 в 19:18)   письмо автору
 
   для: Trianon   (26.12.2010 в 18:29)
 

а что смешного?

  Ответить  
 
 автор: Trianon   (26.12.2010 в 19:24)   письмо автору
 
   для: starpom   (26.12.2010 в 19:18)
 

зависимость создания переменных от входных данных скрипта - потеря контроля над вычислительным процессом например.

  Ответить  
 
 автор: starpom   (26.12.2010 в 19:29)   письмо автору
 
   для: Trianon   (26.12.2010 в 19:24)
 

переменные можно создать невзирая на входные данные скрипта, если второго и третего слова не будет то оставить их пустыми, если будут , то записать в них данные. Или я что-то не так понял?
Если это нереально или очень сложно, то в принципе устроит получение массива в котором в таком виде будут два телефонвна 33333333 44444444444 и ИМЯ если оно есть

  Ответить  
 
 автор: neadekvat   (26.12.2010 в 19:38)   письмо автору
 
   для: starpom   (26.12.2010 в 19:29)
 

А почему я не могу написать так:
Имя 23 4343 24 434; 2343 34 35, 34-323-5
? Ведь у вас, очевидно, "как вздумается - так и пишут".

  Ответить  
 
 автор: starpom   (26.12.2010 в 19:40)   письмо автору
 
   для: neadekvat   (26.12.2010 в 19:38)
 

Можете и так, видать гиблая это затея, ну а хотя бы телефоны выбрать и поудалять тире и пробелы (если они есть )между цифрами реально?

  Ответить  
 
 автор: neadekvat   (26.12.2010 в 19:53)   письмо автору
 
   для: starpom   (26.12.2010 в 19:40)
 

Может, проще будет просить пользователей вводить каждый телефон и свое имя отдельно?

  Ответить  
 
 автор: starpom   (26.12.2010 в 20:05)   письмо автору
 
   для: neadekvat   (26.12.2010 в 19:53)
 

Может и проще, но задача стоит именно средствами php решить вопрос

  Ответить  
 
 автор: neadekvat   (26.12.2010 в 20:32)   письмо автору
 
   для: starpom   (26.12.2010 в 20:05)
 

Кто так поставил задачу?

  Ответить  
 
 автор: cheops   (27.12.2010 в 11:32)   письмо автору
 
   для: starpom   (26.12.2010 в 19:40)
 

>Можете и так, видать гиблая это затея, ну а хотя бы телефоны выбрать и поудалять тире и
>пробелы (если они есть )между цифрами реально?
Можно начать отталкиваться от следующего скрипта
<?php
  $str 
"541-87-42; 067-205-47-01 Василий
541-87-42; 067-205-47-01 Василий
541-87-42; 067-205-47-01 Василий
541-87-42; 067-205-47-01 Василий"
;
  
// Получаем отдельные строки
  
$lines explode("\r\n"$str);
  
// В цикле обрабатываем каждую отдельную строку
  
for($i 0$i count($lines); $i++)
  {
    
// Получаем отдельные подстроки
    
$items preg_split("|[\s]+|"$lines[$i]);
    
// Выделяем телефоны
    
$phones = array();
    for(
$j 0$j count($items); $j++)
    {
      
$items[$j] = trim($items[$j], ",; ");
      
// Проверяем телефон ли это
      
if(preg_match("|[-\d]+|"$items[$j]))
      {
        
// Удаляем тире
        
$items[$j] = str_replace("-"""$items[$j]);
        
// Помещаем телефон-результат в массив
        
$phones[] = $items[$j];
      }
    }
    
// Выделяем имя
    
$name "";
    if(
preg_match("|[^\d]+$|i"$lines[$i], $out)) $name $out[0];
    
// Результат
    
echo "Имя = $name<br>";
    echo 
"Телефоны";
    echo 
"<pre>";
    
print_r($phones);
    echo 
"</pre>";
  }
?>

Не обязательно все делать за один заход. Я обычно обрабатывают такие текстовые базы в несколько заходов: простым скриптом обрабатываю основную массу данных, выделя все, что не подверглось обработки, пишу следующий скрипт для исключительных позиций и так до тех пор, пока не останется штук 50 совершенно диких позиций, которые можно обработать и в ручную (ну это конечно, если задачу нужно решить лишь один раз).

  Ответить  
 
 автор: starpom   (27.12.2010 в 21:23)   письмо автору
 
   для: cheops   (27.12.2010 в 11:32)
 

Спасибо, буду разбираться!

  Ответить  
 
 автор: sim5   (26.12.2010 в 20:07)   письмо автору
 
   для: starpom   (26.12.2010 в 19:29)
 

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

  Ответить  
 
 автор: starpom   (26.12.2010 в 20:17)   письмо автору
 
   для: sim5   (26.12.2010 в 20:07)
 

не получиться

  Ответить  
 
 автор: sim5   (26.12.2010 в 20:20)   письмо автору
 
   для: starpom   (26.12.2010 в 20:17)
 

Это почему?

  Ответить  
 
 автор: starpom   (26.12.2010 в 20:35)   письмо автору
 
   для: sim5   (26.12.2010 в 20:20)
 

Парсер контента пишеться.

  Ответить  
 
 автор: Trianon   (26.12.2010 в 20:44)   письмо автору
 
   для: starpom   (26.12.2010 в 20:35)
 

так бы сразу и сказали.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования