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

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

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проверка ввода телефонного номера

Сообщения:  [1-8] 

 
 автор: cheops   (13.08.2007 в 23:11)   письмо автору
 
   для: ZeeG   (13.08.2007 в 21:01)
 

Регулярным выражениям посвящён соседний форум. Наиболее детально регулярные выражения освещаются в книге Дж. Фридла "Регулярные выражения".

   
 
 автор: ZeeG   (13.08.2007 в 21:01)   письмо автору
 
   для: Unkind   (13.08.2007 в 18:37)
 

Не подскажите ресурс по regex, по-подроднее чтоб?

   
 
 автор: Unkind   (13.08.2007 в 18:37)   письмо автору
 
   для: 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
}
?>

   
 
 автор: ZeeG   (13.08.2007 в 18:32)   письмо автору
 
   для: 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'ами и проверяйте номер по каждому из них.
Можно пример? Маленький, если не трудно...
Спасибо

   
 
 автор: Unkind   (13.08.2007 в 18:21)   письмо автору
 
   для: ZeeG   (13.08.2007 в 18:02)
 

Злоупотребляете условиями "после данной точки". Их обычно применяют, допустим, в preg_replace(). А в данном случае это только ухудшает читабельность выражения.
Из всех номеров из моего примера функция пропустила только "8-909-235-5485".

P.S Лучше создайте массив с pattern'ами и проверяйте номер по каждому из них.

   
 
 автор: ZeeG   (13.08.2007 в 18:02)   письмо автору
 
   для: 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

   
 
 автор: Unkind   (13.08.2007 в 15:21)   письмо автору
 
   для: 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)
?>

   
 
 автор: ZeeG   (13.08.2007 в 14:39)   письмо автору
 
 

Если проверять номер телефона (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 минуты как познакомился с регулярными выражениями и попрошу не кидать камнями если что не так. Если покажите на ошибки буду рад.
Спасибо

   

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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