|
|
|
|
|
для: ZeeG
(13.08.2007 в 21:01)
| | Регулярным выражениям посвящён соседний форум. Наиболее детально регулярные выражения освещаются в книге Дж. Фридла "Регулярные выражения". | |
|
|
|
|
|
|
|
для: Unkind
(13.08.2007 в 18:37)
| | Не подскажите ресурс по regex, по-подроднее чтоб? | |
|
|
|
|
|
|
|
для: ZeeG
(13.08.2007 в 18:32)
| | > Можно пример?
<?php
function check_phone($number)
{
$pattern = array(
"/^8(.|-)?\d{3}\\1?\d{3}\\1?\d{2}\\1?\d{2}$/", //Первое RegEx
"/^8(.|-)?\d{3}\\1?\d{3}\\1?\d{2}\\1?\d{2}$/" //Втрое
//И так далее
);
for($i = 0; $i < count($pattern); $i++)
{
if(preg_match($pattern[$i], $number))
{
return true;
}
}
return false;
}
?>
|
| |
|
|
|
|
|
|
|
для: Unkind
(13.08.2007 в 18:21)
| | Мне просто захотелось усоверш-ть фун-ю.
Теперь она принимает номера:
8 (909) 235 5485
8 909 235 5485
8-909-235-5485
8-(909)-235-5485
8-(909) 235-5485 ... ну и +7 вместо 8.
А как это?
> Лучше создайте массив с pattern'ами и проверяйте номер по каждому из них.
Можно пример? Маленький, если не трудно...
Спасибо | |
|
|
|
|
|
|
|
для: ZeeG
(13.08.2007 в 18:02)
| | Злоупотребляете условиями "после данной точки". Их обычно применяют, допустим, в preg_replace(). А в данном случае это только ухудшает читабельность выражения.
Из всех номеров из моего примера функция пропустила только "8-909-235-5485".
P.S Лучше создайте массив с pattern'ами и проверяйте номер по каждому из них. | |
|
|
|
|
|
|
|
для: Unkind
(13.08.2007 в 15:21)
| | Да Вы правы, а сли он будет вводить +7, а не 8, код провайдера брать / ставить в скобки ...
Согласен, что вообще стоит указать модель ввода и не парить человека догадками как вводить данные. Но как было бы здорово придумать универсальное выражение.
Я подумали написал это:
<?php
function phone($code)
{
$pattern = "/^((8)|([\+]?(7)))+(?(?=([ -]))[ -]?\(?\d{3}\)?)+(?(?=([ -]))[ -]?\d{3})+(?(?=([ -]))[ -]?\d{4})$/";
if(preg_match($pattern, $code))
{
return true;}
return false;}
?>
|
Что думаете?
P.S. Вот только не могу сообразить как разрешить такой формат +7(916)7452123 | |
|
|
|
|
|
|
|
для: ZeeG
(13.08.2007 в 14:39)
| | По-моему, немного нехорошо позволять вводить такие номера как "8 495.2105-689"
Я бы сделал что-то вроде
<?php
function check_phone($number)
{
if(preg_match("/^8(.|-)?\d{3}\\1?\d{3}\\1?\d{2}\\1?\d{2}$/", $number))
{
return true;
}
return false;
}
var_dump(check_phone("89092355485")); //bool(true)
var_dump(check_phone("8-909-235-5485")); //bool(true)
var_dump(check_phone("8-909-235-54-85")); //bool(true)
var_dump(check_phone("8.909.235.5485")); //bool(true)
var_dump(check_phone("09092355485")); //bool(false)
var_dump(check_phone("8-9-0-9-2-3-5-5-4-8-5")); //bool(false)
var_dump(check_phone("8.9.0.9.2.3.5.5.4.8.5")); //bool(false)
var_dump(check_phone("8.09.235.5485")); //bool(false)
var_dump(check_phone("8.909.235-5485")); //bool(false)
?>
|
| |
|
|
|
|
|
|
| Если проверять номер телефона (11) знаков (8-909-235-5485 или 89092355485 или 8.909.235.5485 или 8-495- 210-5689 ну или 8 495.2105-689) можно доверять функции:
function phone($code)
{
$num = $code;
if (preg_match("#^[\d\s-.]+$#", $num))
{
$dev1 = substr_count($num, '-');
$dev2 = substr_count($num, '.');
$dev3 = substr_count($num, ' ');
if ((strlen($num) - $dev1) OR (strlen($num) - $dev2) OR (strlen($num) - $dev3) == 11)
return true;
}
return false;
}
|
Я 3 минуты как познакомился с регулярными выражениями и попрошу не кидать камнями если что не так. Если покажите на ошибки буду рад.
Спасибо | |
|
|
|
|