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

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

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

 

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

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

тема: Упростить регулярное выражение
 
 автор: Gandzas   (06.01.2008 в 21:45)   письмо автору
 
 

в переменных:
$tel1, $tel2, $tel3, $tel4 присутствуют лишние символы: "[пробел]", "-", "(", ")", причем "(" нужно заменить на "8"

Я использую:

$tel1=str_replace(" ","",$tel1);
$tel2=str_replace(" ","",$tel2);
$tel3=str_replace(" ","",$tel3);
$tel4=str_replace(" ","",$tel4);

$tel1=str_replace("-","",$tel1);
$tel2=str_replace("-","",$tel2);
$tel3=str_replace("-","",$tel3);
$tel4=str_replace("-","",$tel4);

$tel1=str_replace(")","",$tel1);
$tel2=str_replace(")","",$tel2);
$tel3=str_replace(")","",$tel3);
$tel4=str_replace(")","",$tel4);

$tel1=str_replace("(","8",$tel1);
$tel2=str_replace("(","8",$tel2);
$tel3=str_replace("(","8",$tel3);
$tel4=str_replace("(","8",$tel4);


Можно ли как-то упростить?

Далее, все эти переменные могут содержать от 0 до 44 символов (только цифры).
Мне нужно, чтобы осталось только 11, но так, чтобы остальные символы не потерялись, а были записаны в следующую пустую переменную, т.е.


if((eregi("([0-9]{44})",$tel1,$match)) && ($tel2==0) && ($tel3==0) && ($tel4==0))


         $tel1=substr($tel1, 0, 10);
         $tel2=substr($tel1, 11, 21);
              $tel3=substr($tel1, 22, 31);
     $tel4=substr($tel1, 32, 43);
}

if((eregi("([0-9]{33})",$tel1,$match)) && ($tel2==0) && ($tel3==0))


         $tel1=substr($tel1, 0, 10);
         $tel2=substr($tel1, 11, 21);
     $tel3=substr($tel1, 22, 31);
}

if((eregi("([0-9]{22})",$tel1,$match)) && ($tel2==0))


         $tel1=substr($tel1, 0, 10);
         $tel2=substr($tel1, 11, 21);
}


Но встречаются варианты, в которых не выполняется условие, т.е.


if((eregi("([0-9]{22})",$tel1,$match)) && ($tel2==0))


         $tel1=substr($tel1, 0, 10);
         $tel2=substr($tel1, 11, 21);
}

если переменная $tel2!=0; то условие не выполняется и нужно прописывать еще несколько условий:

if((eregi("([0-9]{22})",$tel1,$match)) && ($tel2!=0) && ($tel3==0))


         $tel1=substr($tel1, 0, 10);
         $tel3=substr($tel1, 11, 21);
}

и т.д.

Может, можно как-то упростить?

P.S. C наступающим Рождеством! :)

   
 
 автор: SHAman   (07.01.2008 в 00:42)   письмо автору
 
   для: Gandzas   (06.01.2008 в 21:45)
 

Это вырезка и замена:

preg_replace("/[ (-]+/", "", $text);
preg_replace("/)/", "8", $text);


но можно и реплейсом. Быстрее будет, скорее всего. Вместо этих конструкций:

$tel1=str_replace(" ","",$tel1); 
$tel2=str_replace(" ","",$tel2); 
$tel3=str_replace(" ","",$tel3); 
$tel4=str_replace(" ","",$tel4);


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

   
Rambler's Top100
вверх

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