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

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

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

 

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

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

тема: Простая валидация телефона
 
 автор: TetRiska   (24.04.2013 в 14:01)   письмо автору
 
 

Всем привет. Вот написал регулярку и мне интересно насколько верно все я экранировал и вообще составил. Регулярка пропускать должна + - ( ) пробел и цифры.
^[0-9\+\-\(\)\s]+$


И как по краям лишние пробелы удалить. можно через пхп, но уже раз регулярка, то ею.

  Ответить  
 
 автор: Slo_Nik   (25.04.2013 в 02:08)   письмо автору
 
   для: TetRiska   (24.04.2013 в 14:01)
 

удаляйте пробелы trim(), раз можно обойтись без регулярки, то обходитесь.
По поводу регулярного выражения...
А Вы проверяли как оно работает?
Может проще проверить самому и исправить возможные ошибки?

И немного не в тему.
Я бы чуть по другому составил выражение.
В Вашем случае такие символы как "+", ")", "(" (и не только) могут присутствовать в любом месте строки и представьте какая каша будет в форматах телефонных номеров.
Можно писать
+ 495 123-(55)-25
или +7 (+495) 123-25-52
и ещё куча вариантов
Когда Вы выводите подобные телефонные номера, то что за бред получится? Каждый будет извращаться как захочет.
А если попробовать начать с этого, то может будет лучше?

<?php 
$phone 
"+7(495) 123-25-52";
$pattern "#^\+[0-9]{1,2}\s?\([0-9]{3}\)\s?[0-9]+\-[0-9]+\-[0-9]+$#";
if(
preg_match($pattern$phone$out)){
    echo 
"Номер правильно написан";
}
else{
    echo 
"Номер неправильно написан";
}
?>

В таком случае номер телефона можно будет указать только в одном формате и когда будете выводить список номеров, то всё будет красиво)))

p.s. Регулярка не идеальна, но...)))

  Ответить  
 
 автор: TetRiska   (25.04.2013 в 13:00)   письмо автору
 
   для: Slo_Nik   (25.04.2013 в 02:08)
 

дело в том, что мне не нужно жестко следовать формату, не все на портале будут верно вводить, уже проверенно, многие просто плюнут и пойдут дальше, поэтому было принято решение пусть вводят "+", "(", ")", цифры как душе угодно, главное не допустить иные символы, не входящие в номер телефона...нужно только обрезать в начале ив конце пробелы, желательно подправить регулярку, пыхой можно забыть обработать

  Ответить  
 
 автор: Slo_Nik   (28.04.2013 в 09:47)   письмо автору
 
   для: TetRiska   (25.04.2013 в 13:00)
 

Ну раз так, то можно и Вашим регулярным проверить, только опять же, чуть подправить

<?php 
$pattern 
"#^[-+0-9()\s]+$#";
?>

если служебные символы, в Вашем случае это ")", "(", "+", присутствуют в символьном классе, то их не надо экранировать.
Если бы Вам надо было вернуть из строки то, что находится в круглых скобках, например, то тогда надо экранировать круглые скобки.

<?php
$str 
'вернуть то, что в (круглых скобках)';
$pattern "#\((.+)\)#u";
?>

Вот как-то так, пример не проверял)))

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

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