|
|
|
| Мне нужно составить три паттерна для проверки телефонных номеров.
Третий паттерн - это объединение первого и второго.
Уже сама пробовала:
<?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\
Покажите, где ошибка | |
|
|
|
|
|
|
|
для: Лена
(10.12.2008 в 23:48)
| | Символ "+" в PCRE имеет особый смысл. Вы забыли его экранировать. | |
|
|
|
|
|
|
|
для: BinLaden
(10.12.2008 в 23:52)
| | Сделала. Теперь выдает ошибку на второй и третий паттерн.
В PCRE что означают две первые буквы? Только что пробовала по мануалу найти, не могу. Везде только эта аббревиатура. объяснения ее нет. | |
|
|
|
|
|
|
|
для: Лена
(11.12.2008 в 00:12)
| | Perl Compatible -- Perl-совместимые. Фактически такие же регулярные выражения используются в Perl.
> Теперь выдает ошибку на второй и третий паттерн.
Ошибки в смысле "Введите рабочий телефон корректно", "Введите телефон корректно"?
Во втором Вы забыли экранировать символы "(" и ")".
А в третьем сами посмотрите -- строка "8(044) 234-43-34" просто не подходит под Ваш паттерн. | |
|
|
|
|
|
|
|
для: 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? | |
|
|
|
|
|
|
|
для: Лена
(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)$#"
|
| |
|
|
|
|
|
|
|
для: Trianon
(11.12.2008 в 10:21)
| | Такого типа телефон 8(044) 234-43-34 - нормально
А если такой +38-097-234-34-23 не работает. | |
|
|
|
|
|
|
|
для: Лена
(11.12.2008 в 17:00)
| | лишний минус вбил после 38
зачем в номере пробелы? | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2008 в 17:06)
| | Получилось. Спасибо.
>зачем в номере пробелы?
У нас все время так пишут. 8(код города) телефон внутри города через пробел, а у вас не так? | |
|
|
|
|
|
|
|
для: Лена
(11.12.2008 в 17:34)
| | У на по всякому пишут, и с пробелами и с минусами и со скобками и вообще без всего.
Я бы вообще все знаки кроме цифр и плюса выкидывал перед проверкой. | |
|
|
|