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

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

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

 

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

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

тема: Телефоны
 
 автор: Лена   (10.12.2008 в 23:48)   письмо автору
 
 

Мне нужно составить три паттерна для проверки телефонных номеров.
Третий паттерн - это объединение первого и второго.
Уже сама пробовала:

<?php
$error 
= array();
$phone "+38-097-234-34-23";
if(!
preg_match("#^+38-0\d{2}-\d{3}-\d{2}-\d{2}$#"$phone)) 
$error[1] = "<div class='error'>Введите мобильный телефон корректно</div>";

$phone1 "8(044) 234-43-34";
if(!
preg_match("#^8(044)\s\d{3}-\d{2}-\d{2}$#"$phone1)) 
$error[2] = "<div class='error'>Введите рабочий телефон корректно</div>";

$phone3 "8(044) 234-43-34";
if(!
preg_match("#^(+3)?8(?:-\(044\)\s-\d{3}-)?\d{3}-\d{2}-\d{2}$#"$phone3)) 
$error[3] = "<div class='error'>Введите телефон корректно</div>";
print_r($error);
?>


Получила все три ошибки.
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1 in Z:\home\
Покажите, где ошибка

  Ответить  
 
 автор: BinLaden   (10.12.2008 в 23:52)   письмо автору
 
   для: Лена   (10.12.2008 в 23:48)
 

Символ "+" в PCRE имеет особый смысл. Вы забыли его экранировать.

  Ответить  
 
 автор: Лена   (11.12.2008 в 00:12)   письмо автору
 
   для: BinLaden   (10.12.2008 в 23:52)
 

Сделала. Теперь выдает ошибку на второй и третий паттерн.
В PCRE что означают две первые буквы? Только что пробовала по мануалу найти, не могу. Везде только эта аббревиатура. объяснения ее нет.

  Ответить  
 
 автор: BinLaden   (11.12.2008 в 00:32)   письмо автору
 
   для: Лена   (11.12.2008 в 00:12)
 

Perl Compatible -- Perl-совместимые. Фактически такие же регулярные выражения используются в Perl.

> Теперь выдает ошибку на второй и третий паттерн.
Ошибки в смысле "Введите рабочий телефон корректно", "Введите телефон корректно"?
Во втором Вы забыли экранировать символы "(" и ")".
А в третьем сами посмотрите -- строка "8(044) 234-43-34" просто не подходит под Ваш паттерн.

  Ответить  
 
 автор: Лена   (11.12.2008 в 09:58)   письмо автору
 
   для: BinLaden   (11.12.2008 в 00:32)
 

Второй получился.
А по третьему вы меня не поняли. Я хочу третий паттерн сделать как объединение первого и второго, чтобы под него подходили и номера формата 8(044) 234-43-34, и номера +38-097-234-34-23. Но выдает ошибку. Сейчас у меня вот так:

$phone3 = "8(044) 234-43-34  +38-097-234-34-23";
if(!preg_match("#^(\+3)?8(?:-\d{3}-\(044\)\s)?\d{3}-\d{2}-\d{2}$#", $phone3)) 
$error[3] = "<div class='error'>Введите телефон корректно</div>";

Как мне показать, что первый телефон начинается на 8, а второй на +3?

  Ответить  
 
 автор: Trianon   (11.12.2008 в 10:21)   письмо автору
 
   для: Лена   (11.12.2008 в 09:58)
 

$q1 = preg_quote('8(044)';
$q2 = preg_quote('+38-');
$p3 = '\d\d\d-\d\d-\d\d';
$p = "#^($q1\s?$p3|$q2-\d\d\d-$p3)$#"

  Ответить  
 
 автор: Лена   (11.12.2008 в 17:00)   письмо автору
 
   для: Trianon   (11.12.2008 в 10:21)
 

Такого типа телефон 8(044) 234-43-34 - нормально
А если такой +38-097-234-34-23 не работает.

  Ответить  
 
 автор: Trianon   (11.12.2008 в 17:06)   письмо автору
 
   для: Лена   (11.12.2008 в 17:00)
 

лишний минус вбил после 38

зачем в номере пробелы?

  Ответить  
 
 автор: Лена   (11.12.2008 в 17:34)   письмо автору
 
   для: Trianon   (11.12.2008 в 17:06)
 

Получилось. Спасибо.
>зачем в номере пробелы?
У нас все время так пишут. 8(код города) телефон внутри города через пробел, а у вас не так?

  Ответить  
 
 автор: Trianon   (11.12.2008 в 19:03)   письмо автору
 
   для: Лена   (11.12.2008 в 17:34)
 

У на по всякому пишут, и с пробелами и с минусами и со скобками и вообще без всего.
Я бы вообще все знаки кроме цифр и плюса выкидывал перед проверкой.

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

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