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

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

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

 

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

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

тема: проверка телефона
 
 автор: Dizels   (26.07.2009 в 15:33)   письмо автору
 
 

я в регулярных выражениях очень плохо разбираюсь, поэтому прошу помочь.

Есть форма, нужно проверить, правильно ли введен номер телефона. Ориентировочно, какой телефон может быть:

+380631234567, т.е. всего 13 символов (если считать вместе с +)

в общем нужно условие, чтобы могли вставлять только + - () и цифры.
Заранее большое спасибо.

  Ответить  
 
 автор: cheops   (26.07.2009 в 16:33)   письмо автору
 
   для: Dizels   (26.07.2009 в 15:33)
 

Можно отталкиваться от следующего скрипта
<?php
  
// Телефон
  
$phone "+380631234567";
  
// Регулярное выражение
  
$pattern "|^[-\d+\(\)]+$|";
  
// Проверка
  
if(preg_match($pattern$phone)) echo "Введено правильно";
  else echo 
"Введено неправильно";
?>

  Ответить  
 
 автор: Trianon   (26.07.2009 в 16:38)   письмо автору
 
   для: cheops   (26.07.2009 в 16:33)
 

8-))))

  Ответить  
 
 автор: Dizels   (26.07.2009 в 16:43)   письмо автору
 
   для: cheops   (26.07.2009 в 16:33)
 

у меня почему-то выводит Введено правильно (при этом в базу не происходит запись) если пытаюсь внести телефон 8(063)1234567.
А если ввожу: 8-063-123-45-154 то вообще в таблицу записывает -180

  Ответить  
 
 автор: cheops   (26.07.2009 в 17:22)   письмо автору
 
   для: Dizels   (26.07.2009 в 16:43)
 

Поле под телефон в таблице какого типа выделено?

  Ответить  
 
 автор: x64   (28.07.2009 в 11:51)   письмо автору
 
   для: Dizels   (26.07.2009 в 15:33)
 


<?php
    $phone 
'+380631234567';
    if (
preg_match('!^\+?[0-9\-\(\)]+$!'$phone)) echo 'верно';
    else echo 
'неверно';
?> 


начинаться может с + или с одного из разрешённых символов.
я бы ещё пробел добавил в список разрешённых.

  Ответить  
 
 автор: AcidTrash   (28.07.2009 в 22:08)   письмо автору
 
   для: x64   (28.07.2009 в 11:51)
 

Оное то хорошо, но можно процитировать Trianon`a
8-))))

  Ответить  
 
 автор: t3ma   (04.08.2009 в 16:56)   письмо автору
 
   для: AcidTrash   (28.07.2009 в 22:08)
 

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

в чем ошибка ?


<?php
for ($i=1;$i<=9$i++){ 
      
$oldcellular='oldcellular1_'.$i
      if (!
preg_match("|^[0-9]+$|", $$oldcellular)){  
                   exit ( 
"Телефон должен содержать только цифры");  
       } 
}
unset (
$i);

for (
$i=1;$i<=6$i++){ 
      
$oldstationary=' $oldstationary_1_'.$i
      if (!
preg_match("|^[0-9]+$|", $$oldstationary)){  
                   exit (
"Телефон должен содержать только цифры");  
       } 
}
unset (
$i);

for (
$i=1;$i<=9$i++){ 
      
$cellular='cellular1_'.$i
      if (!
preg_match("|^[0-9]+$|", $$cellular)){  
                   exit (
"Телефон должен содержать только цифры");  
       } 
}
unset (
$i);

for (
$i=1;$i<=6$i++){ 
      
$stationary='stationary_1_'.$i
      if (!
preg_match("[|^[0-9]+$|]", $$stationary)){  
                   exit (
"Телефон должен содержать только цифры");  
       } 
?>
}

  Ответить  
 
 автор: ..........   (04.08.2009 в 17:21)
 
   для: t3ma   (04.08.2009 в 16:56)
 

\d{5,15}

не меньше 5и и не больше 15и [0-9] символов

  Ответить  
 
 автор: .........   (04.08.2009 в 17:24)
 
   для: t3ma   (04.08.2009 в 16:56)
 

^ - начало проверяемого текста

$ - конец проверяемого текста

  Ответить  
 
 автор: t3ma   (05.08.2009 в 10:36)   письмо автору
 
   для: .........   (04.08.2009 в 17:24)
 

.....

  Ответить  
 
 автор: ......   (04.08.2009 в 17:38)
 
   для: t3ma   (04.08.2009 в 16:56)
 

ответ на изменённый вопрос

что в переменных :

$oldcellular1_1
$oldcellular1_2
$oldcellular1_3
$oldcellular1_4
$oldcellular1_5
$oldcellular1_6
$oldcellular1_7
$oldcellular1_8
$oldcellular1_9

$$oldstationary_1_1
$$oldstationary_1_2
$$oldstationary_1_3
$$oldstationary_1_4
$$oldstationary_1_5
$$oldstationary_1_6

cellular1_1
cellular1_2
cellular1_3
cellular1_4
cellular1_5
cellular1_6
cellular1_7
cellular1_8
cellular1_9

stationary_1_1
stationary_1_2
stationary_1_3
stationary_1_4
stationary_1_5
stationary_1_6

???

  Ответить  
 
 автор: ....   (04.08.2009 в 17:39)
 
   для: t3ma   (04.08.2009 в 16:56)
 

в последних двух столбцах забыл по одной $ в названиях переменных

  Ответить  
 
 автор: .......   (04.08.2009 в 17:47)
 
   для: t3ma   (04.08.2009 в 16:56)
 

> if (!preg_match("[|^[0-9]+$|]", $$stationary)){

  Ответить  
 
 автор: t3ma   (05.08.2009 в 09:35)   письмо автору
 
   для: .......   (04.08.2009 в 17:47)
 

|^[0-9]+$| - это как надо работает, но надо сделать чтобы поле могло остоватся пустым (щас выдает ошибку) а когда поле не пустое чтобы не было пробелов.. можно ли так сделать ?

  Ответить  
 
 автор: t3ma   (05.08.2009 в 10:20)   письмо автору
 
   для: t3ma   (05.08.2009 в 09:35)
 

уже разобрался.
вместо + надо поставить {0,}

  Ответить  
 
 автор: Саня   (05.08.2009 в 10:48)   письмо автору
 
   для: Dizels   (26.07.2009 в 15:33)
 

<?php
$tel 
'+38 (068) 11-222-33';
$tel preg_replace('!\D!'''$tel);
if ( 
preg_match('!^38\d{10}$!'$tel) ) { // или '!^(\d{12}|\d{11})$!' если не нужно привязываться к коду украины
  
print 'Соответствует';
} else {
  print 
'Не соответствует';
}
Пусть пользователи вводят в каком угодно формате. На выходе у нас будет чистый номер без какого-либо форматирования. Потом к этому номеру при выводе можно приделывать плюс, скобки и дефисы.

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

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