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

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

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

 

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

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

тема: Регулярное выражение для номеров в разном формате
 
 автор: Loneliness   (15.11.2007 в 15:24)   письмо автору
 
 

Помогите, пожалуйста, составить регулярку для определения и манипуляций с разноформатными номерами телефонов в тексте. Номера могут встречаться в таких видах например:
Тел. 8.906-777-777
тел.8-906-777.777
Тел. 8-906.777777
Тел +7.903 777-777
тел. +38-096-577-45-66
тел. 5857552
Тел. 585-7552
тел 585 7552
и в подобных комбинациях в разнобой. То есть может быть произвольное количество точек, тире или пробелов в номере. Еще ньюанс- перед номером всегда есть текст Тел. в произвольном регистре. Но после него может идти не один номер, а два или три- Тел. 8.906-777-777 585-7552 длина одного номера от 6 до 12 цифр(не считая разделителей)
Буду искренне благодарен за пример кода регулярного выражения.

   
 
 автор: Faraon   (15.11.2007 в 15:35)   письмо автору
 
   для: Loneliness   (15.11.2007 в 15:24)
 

В итоге то что надо получить? телефоны в одном формате?

   
 
 автор: Loneliness   (15.11.2007 в 16:08)   письмо автору
 
   для: Faraon   (15.11.2007 в 15:35)
 

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

   
 
 автор: Faraon   (15.11.2007 в 17:01)   письмо автору
 
   для: Loneliness   (15.11.2007 в 16:08)
 

Примерно так

<?php
$text
="Начальный текст Тел. 8.906-777-777
текст1 тел.8-906-777.777
Тел. 8-906.777777 еще текст
Тел +7.903 777-777 и тут текст!
тел. +38-096-577-45-66
крутой текст.  тел. 5857552 5777552
Тел. 585-7552 test
тел 585 7552"
;
print 
preg_replace("|тел.\s?\+?[\d\.\-\s]+|is","",$text);
?>

   
 
 автор: Loneliness   (15.11.2007 в 18:36)   письмо автору
 
   для: Faraon   (15.11.2007 в 17:01)
 

Что-то не совсем то. Вот пример с реальным куском текста:

<?php 
$text
='текст <b>текст текст текст текст текст </b>
    
текст текст текст текст текст текст текст текст текст текст текст текст текст текст 
текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст 
    
  1 текст текст текст  - 800текст текст текст текст текст      
    
    
    Тел. <b>3822 504-520</b><b></b>
    
            <br>
            <br>
           
    
        <img alt="img" src="image/423444" border="1" /></div><div class="s"> 
    
        <br>
      
текст текст текст текст текст текст  2000 текст текст текст ., текст текст текст  - 2000 текст текст , текст текст текст  - 3000 текст текст ., текст текст текст текст  - 1500 текст текст .<br>текст текст текст текст текст     
    Тел. <b>3822 212-520, 3822 500-630</b><b></b>
    
            <br>
            <br>
             
        <img alt="img" src="image/427809" border="1" /></div><div class="s"> 
    
    
        
        <br>
    

    
`текст текст текст  - 24 текст текст   <br>текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст 
    
    
1 текст текст текст текст  - 800текст текст текст     
    
    
    Тел. <b>3822 503-940</b><b></b>
    
            <br>
            <br>
           
    
        <img alt="img" src="http://images-ru1.dosug.nu/servlet/image/423443" border="1" /></div><div class="s"> '

$output=preg_replace("|тел.\s?\+?[\d\.\-\s]+|is","TUT_NOMER",$text);
echo 
iconv('windows-1251','utf-8',$output);
?>

Не заменяются номера никак... :(

   
 
 автор: Саня   (15.11.2007 в 18:41)   письмо автору
 
   для: Loneliness   (15.11.2007 в 18:36)
 

В этом случае всё просто:
<?
$output
=preg_replace("|тел\.\s<b>.+</b>|isU","TUT_NOMER",$text);  

   
 
 автор: Loneliness   (15.11.2007 в 19:16)   письмо автору
 
   для: Саня   (15.11.2007 в 18:41)
 

Вот это самое то! Благодарю за помощь.

   
 
 автор: Саня   (15.11.2007 в 18:23)   письмо автору
 
   для: Loneliness   (15.11.2007 в 15:24)
 

<?php
$data 
"Тел. 8.906-777-777 
тел.8-906-777.777 
Тел. 8-906.777777 
Тел +7.903 777-777 
тел. +38-096-577-45-66
тел. 5857552 
Тел. 585-7552 
тел 585 7552"
;
$data preg_replace("/[^+\d\n]/"""$data);
print_r(explode("\n"$data));
Получите массив с одними номерами

   
 
 автор: Loneliness   (15.11.2007 в 18:45)   письмо автору
 
   для: Саня   (15.11.2007 в 18:23)
 

Массив получил,
Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => 1800 [9] => [10] => [11] => 3822504520 [12] => [13] => [14] => [15] => [16] => [17] => 4234441 [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => 2000200030001500 [26] => [27] => [28] => [29] => [30] => [31] => 38222125203822500630 [32] => [33] => [34] => [35] => [36] => [37] => 4278091 [38] => [39] => [40] => [41] => [42] => [43] => [44] => [45] => 24 [46] => [47] => [48] => 1800 [49] => [50] => [51] => 3822503940 [52] => [53] => [54] => [55] => [56] => [57] => 14234431 )
и он содержит все номера. Только проблематично его использовать- в тексте могут присутствовать кроме нужных мне номеров телефонов иные числовые данные, и сами телефоны разбираются так, что сложно их(для меня по крайней мере) собрать в кондиционный вид..

$data='текст <b>текст текст текст текст текст </b>    
текст текст текст текст текст текст текст текст текст текст текст текст текст текст 
текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст    
1 текст текст текст  - 800текст текст текст текст текст      
    
    
    Тел. <b>3822 504-520</b><b></b>
    
            <br>
            <br>
           
    
        <img alt="img" src="image/423444" border="1" /></div><div class="s"> 
    
    
        
        <br>
    

    
текст текст текст текст текст текст  2000 текст текст текст ., текст текст текст  - 2000 текст текст , текст текст текст  - 3000 текст текст ., текст текст текст текст  - 1500 текст текст .<br>текст текст текст текст текст   
    
    Тел. <b>3822 212-520, 3822 500-630</b><b></b> 
            <br>
            <br>   
        <img alt="img" src="image/427809" border="1" /></div><div class="s">       
        <br>
    
`текст текст текст  - 24 текст текст   <br>текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст 
      
1 текст текст текст текст  - 800текст текст текст     
    Тел. <b>3822 503-940</b><b></b>
    
            <br>
            <br> 
        <img alt="img" src="http://images-ru1.dosug.nu/servlet/image/423443" border="1" /></div><div class="s"> '; 
$data = preg_replace("/[^+\d\n]/", "", $data); 
print_r(explode("\n", $data));
?>


Я заметил, все телефоны находятся в тегах <b></b> -может это можно как-то использовать? Хотя, хотелось бы только номера, мало-ли- дизайн изменится..

   
Rambler's Top100
вверх

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