корекция на низ от числа със substr ?!?

C++ JAVA
Post Reply
mnis
Нов
Нов
Posts: 94
Joined: Sat Feb 10, 2007 6:06 pm

корекция на низ от числа със substr ?!?

Post by mnis » Fri Jun 05, 2009 8:09 pm

Здравейте,
Имам таблица с данни на потребители...
Едно от полетата е за телефонния номер на потребителя. В момента телефонните номера са вмъкнати по най-различни начини: примерно 0888.1234.56 други са 0889/123 456 трети 0889-123-456, четвърти 052-123456...

Желанието ми е всички номера да се показват в сайта в следния формат:
0889 123 456 (за мобилните), 052 123 456 за стационарните и т.н. (с интервал между трите групи числа)

Проблема реших на 50%. Направих следното:
1. Променям всички телефонни номера във вида: 0888123456 чрез

Code: Select all

$telephone = str_replace("/", "", $telephone); 
(за номерата имащи / наклонена черта в номера,
а след това се опитвам да ги "разделя" по желания от мен начин ( 0889 123 456 )

Но именно в това "разделяне нещо не мога да се справя.
Мисля, че трябва да се направи със substr. Опитвах сума ти варианти, но винаги нещо бъркам.

Ще се радвам, ако някой ми помогне.

raiden
Гуру
Гуру
Posts: 2182
Joined: Fri Dec 08, 2006 8:13 am
Answers: 190
Location: Варна

Post by raiden » Fri Jun 05, 2009 8:24 pm

$telephone = "0888.1234.56";
$telephone = preg_replace("/\D/", "", $telephone);
$phone = strrev($telephone);
preg_match("/(\d{3})(\d{3})(\d*)/", $phone, $masiv);
$telefon = $masiv[1]." ".$masiv[2]." ".$masiv[3];
$telefon = strrev($telefon);
echo $telefon;

mnis
Нов
Нов
Posts: 94
Joined: Sat Feb 10, 2007 6:06 pm

ясно...

Post by mnis » Fri Jun 05, 2009 8:31 pm

Явно ще трябва да прочета и за preg_match (освен за substr) :)

Благодаря за оказаната помощ raiden - заслужи си точката...

User avatar
bafitu
Много Редовен
Много Редовен
Posts: 1509
Joined: Mon Dec 12, 2005 9:12 am
Answers: 102
Location: Somewhere around nothing..

Post by bafitu » Fri Jun 05, 2009 8:33 pm

raiden wrote:$telephone = "0888.1234.56";
$telephone = preg_replace("/\D/", "", $telephone);
echo '0'.wordwrap(substr($telephone,1,strlen($telephone)),3," ",true);


по кратко :)

raiden
Гуру
Гуру
Posts: 2182
Joined: Fri Dec 08, 2006 8:13 am
Answers: 190
Location: Варна

Post by raiden » Fri Jun 05, 2009 8:40 pm

Знам че с регулярни изрази не е най-подходящо ама поне няма да стават грешки. И все пак давай да действа отзад напред, че така с 9 цифрени номера изкарва 4 цифрен код отпред

echo '0'.strrev(wordwrap(strrev(substr($telephone,1,strlen($telephone))),3," ",true));

mnis
Нов
Нов
Posts: 94
Joined: Sat Feb 10, 2007 6:06 pm

ок

Post by mnis » Fri Jun 05, 2009 8:47 pm

ок - но какво да направя за номерата с по 5 или 6 цифри, например 5-69-09
или 11-22-33 ?!?

Edit: В момента няма проблеми със стандартните номера (0889 123 456), но когато номера е с 6 цифри (или по-малко), нещо се обърква и не извежда коректно номера?!?

raiden
Гуру
Гуру
Posts: 2182
Joined: Fri Dec 08, 2006 8:13 am
Answers: 190
Location: Варна

Post by raiden » Fri Jun 05, 2009 8:58 pm

$telephone = "626";
$telephone = preg_replace("/\D/", "", $telephone);
if(strlen($telephone) > 6) {
echo '0'.strrev(wordwrap(strrev(substr($telephone,1,strlen($telephone))), 3, " ", true)); } else {
echo strrev(wordwrap(strrev($telephone),2," ",true)); }

Нещо такова... предполагам 9-10 цифрените номера ще са ти с код на населено място или мобилен оператор, затова започвам с 0, а останалите ще са само цифри така че си ги разделя на по 2 по 2

mnis
Нов
Нов
Posts: 94
Joined: Sat Feb 10, 2007 6:06 pm

Post by mnis » Fri Jun 05, 2009 9:01 pm

а-ха..... сега вече сханах :)

raiden - отвори някаква тема, за да ти дам още една точка, че съм ти задължен :D

raiden
Гуру
Гуру
Posts: 2182
Joined: Fri Dec 08, 2006 8:13 am
Answers: 190
Location: Варна

Post by raiden » Fri Jun 05, 2009 9:03 pm

Хах, няма нужда :) Едно благодаря и на бафито за по-краткия вариант

Post Reply