Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Регулярка на телефоны

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Webtest
Отправлено: 24 Июля, 2014 - 14:00:57
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Здравствуйте.

Подскажите пожалуйста, как сделать проверку через пхп на телефон?
Я нашел такое:
CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_match('/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/ui', $mail['phone'], $matches);
  2. if (!count($matches)) {
  3. $err[]='ошибка.'; }

Но этот код отбрасывает городские номера.
Как сделать такой код, который бы проверял переменную
$mail['phone']
И, если бы в переменной были бы какие-то символы, кроме: 0-9, пробел, +, (, ), -
То выводилась бы ошибка?
Помогите написать регулярку!
 
 Top
Саныч Модератор
Отправлено: 24 Июля, 2014 - 14:05:35
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Webtest пишет:
И, если бы в переменной были бы какие-то символы, кроме: 0-9, пробел, +, (, ), -
/#^[\d\s\+\(\)\-]+$#/
Но учтите, что такая проверка посчитает строку скажем из десятка скобочек валидным номером телефона


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Webtest
Отправлено: 24 Июля, 2014 - 14:14:37
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Саныч, а как твой код встроить, чтобы он показывал сам телефон?
Вот это ничего невыводит:
CODE (htmlphp):
скопировать код в буфер обмена
  1.         $str = '661121';
  2.     preg_match('/(#^[\d\s\+\(\)\-]+$#)/ui', $str, $matches);
  3.         print_r($matches);

(Добавление)
ВОТ, я как бы написал такой код:
CODE (htmlphp):
скопировать код в буфер обмена
  1.         $str = '151515';
  2.     preg_match('/([0-9()\-\+\ ]{5,20})/ui', $str, $matches);
  3.         print_r($matches);

НО, как сделать так, чтобы если в нем попадались другие знаки, кроме тех что я перечислил, то он не обрезал номер, например, если написать номер: 8(952)000 00 0 00, то он же и выводится.
А если написать номер: 8(952)0фыв00 00 0 00, то выводится 8(952)0, а надо чтобы ничего не выводилось.
(Добавление)
Или как сделать проверку самой $str НЕ через регулрку, чтобы в ней, кроме этих символов ничего не было?
Я вот думаю, может перед прегом делать проверку, если в строке есть символы, кроме допустимых, то ошибка, как это сделать?
 
 Top
DelphinPRO
Отправлено: 24 Июля, 2014 - 14:28:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




нужно проверять

PHP:
скопировать код в буфер обмена
  1. if (!preg_match(...)) {
  2.   echo 'Номер введен неверно';
  3. }


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DlTA
Отправлено: 24 Июля, 2014 - 14:31:43
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




из личного опыта, дурацкая идея проверять валидность ввода, лучше вычищайте текст от мусора и получите чистый номер, а дальше проверяйте количество символов
 
 Top
Webtest
Отправлено: 24 Июля, 2014 - 14:33:07
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




DelphinPRO,
CODE (htmlphp):
скопировать код в буфер обмена
  1.     if (!preg_match('/([0-9\(\)\-\+\ ]{5,20})/ui', $str, $matches)) {
  2.         echo 'error';
  3.     } else {
  4.                 print_r($matches);
  5.         }

Все равно ошибка.
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Июля, 2014 - 19:41:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




DlTA пишет:
из личного опыта, дурацкая идея проверять валидность ввода, лучше вычищайте текст от мусора и получите чистый номер, а дальше проверяйте количество символов
Из личного опыта, а так же из недавнего обсуждения в скайпе - ни в коем случае нельзя очищать и проверять потом кол-во символов (цыфирь). Потому что:

- это число от 1 до 3 знаков - код страны
(Х) - от 3 до 5 знаков - код региона (областные и районные АТС)
Х-Х-Х - конечный номер абонента, может принимать формы: ххх-хх-хх, хх-хх-хх, х-хх-хх

Например код РФ = +7, а код Украины +38 - очистка от "лишних" символов лишит тебя возможности узнать код страны. А как я написал выше - бывают и трехзначные коды стран.

Например региональный "виртуальный" код билайна (один из) в РФ - 906, а региональный областной код Калуги - 4842, а Москвы - 495.

Так что правильным решением будет четко определить маску ввода телевона и проверять её на клиенте в js. А на сервере валидировать сформированную js строку и ожидать там четко отсепарированные данные, предпочтительно в таком виде:

/^+?(\d{1,3})\s*\((\d{3,5})\)\s*(\d{1,3})-(\d{2})-(\d{2})$/

А потом уже как хочешь - можешь сохранять их в разных полях таблицы в БД - так сможешь отдать в любом формате.
 
 Top
Sail
Отправлено: 25 Июля, 2014 - 08:52:29
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




DeepVarvar пишет:
Например код РФ = +7, а код Украины +38 - очистка от "лишних" символов лишит тебя возможности узнать код страны. А как я написал выше - бывают и трехзначные коды стран

А как, простите, АТС определяет код страны, региона и прочие? Улыбка
Пользователь же-ж на телефоне просто цифирки набирает подряд... Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB