|
|
|
| Помогите, пожалуйста, составить регулярку для определения и манипуляций с разноформатными номерами телефонов в тексте. Номера могут встречаться в таких видах например:
Тел. 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 цифр(не считая разделителей)
Буду искренне благодарен за пример кода регулярного выражения. | |
|
|
|
|
|
|
|
для: Loneliness
(15.11.2007 в 15:24)
| | В итоге то что надо получить? телефоны в одном формате? | |
|
|
|
|
|
|
|
для: Faraon
(15.11.2007 в 15:35)
| | Нет, в итоге мне нужно определить, что в тексте найден номер, и, например, заменить каждый найденный номер своим текстом. То бишь, скажем авторизованным пользователям номера будут открыты, для неавторизованных- вместо номера подставляется ссылка на страницу авторизации. | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: 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);
?>
Не заменяются номера никак... :(
|
| |
|
|
|
|
|
|
|
для: Loneliness
(15.11.2007 в 18:36)
| | В этом случае всё просто:
<?
$output=preg_replace("|тел\.\s<b>.+</b>|isU","TUT_NOMER",$text);
|
| |
|
|
|
|
|
|
|
для: Саня
(15.11.2007 в 18:41)
| | Вот это самое то! Благодарю за помощь. | |
|
|
|
|
|
|
|
для: 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));
| Получите массив с одними номерами | |
|
|
|
|
|
|
|
для: Саня
(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> -может это можно как-то использовать? Хотя, хотелось бы только номера, мало-ли- дизайн изменится.. | |
|
|
|