Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 05.08.2019
Сообщений: 43

Регулярное выражения, как правильно собрать несколько функции для проверки номер телефона

17.03.2021, 22:53. Показов 826. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте, собрала такую проверку из регулярных выражений, вроде все работает.
можно ли эту конструкцию сделать компактнее, и собрать все preg_replace в одну строку?

PHP
1
2
3
4
5
6
7
8
9
//проверяем если вводили телефон или майл 
if(preg_match("/^(\s*)?(\+)?((\s*)?(\--*)?(\s*)?[- _():=+]?(\s*)?(\--*)?(\s*)?\d(\s*)?[- _():=+]?){5,15}(\s*)?$/",$login)){
$login = preg_replace('/[^\d+]+/','', $login);// убираем все кроме цифр и +
$login = preg_replace('/^7/', '+7', $login); // если спереди 7 меняем на +7
$login = preg_replace('/^8/', '+7', $login);// если спереди 8 меняем на +7
if(!preg_match("/^\+7/",$login)){// если спереди отсутствует +7 добавляем +7
$login = "+7" .$login;
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2021, 22:53
Ответы с готовыми решениями:

Регулярное выражение для проверки строки на номер телефона
Регулярное выражение для проверки строки на номер телефона в формате +37525-xxx-xx-xx Вот выражение, которое не работает: ...

Регулярное выражение для проверки ввода телефона?
Как найти ответ на мой вопрос в ответах форума? Наверняка он уже обсуждался. Или подскажите, пожалуйста, код.

Как правильно указвать для Яши номер телефона?
У меня беларусский сайт и я хочу, чтобы Яша распознал географическую привязку. Сделал на главной странице блок контактов вида: ...

2
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
18.03.2021, 01:06
kristi14, да можно - соберите в массив все шаблоны регулярных выражений для preg_replace(), и передавайте первым аргументом в preg_replace() этот массив шаблонов
0
Невнимательный
 Аватар для ft4l
3114 / 1293 / 359
Регистрация: 08.02.2013
Сообщений: 7,571
Записей в блоге: 2
18.03.2021, 02:08
Цитата Сообщение от kristi14 Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(preg_match("/^
(\s*)?          # пробелы или нет
(\+)?           # +  или нет
(
    (\s*)?      # пробелы или нет
    (\--*)?     # -- или -----...
    (\s*)?      # пробелы или нет
    [- _():=+]? # пунктуация или пробелы
    (\s*)?      # пробелы или нет
    (\--*)?     # -- или -----...
    (\s*)?      # пробелы или нет
    \d          # цифра
    (\s*)?      # пробелы или нет
    [- _():=+]? # пунктуация или пробелы
){5,15}
(\s*)?          # пробелы или нет
$/x",$login)){
жесть ))
$login = ' 5-55-55 '; >>> '+755555'

Цитата Сообщение от kristi14 Посмотреть сообщение
компактнее
не намного )) ... с такими заменами
мой вариант
... если правильно понимаю какие бывают номера
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
foreach([
 ' +4 (888) 888-88-88 ',
 ' +7 (8888) 88-88-88 ',
 ' 7 (88888) 8-88-88 ',
 ' 8 (888) 888-88-88 ',
 ' 888-88-88 ',
 ' 8-88-88 ',
 ' +7777777  '] AS $num) {
        echo var_export($num, 1), "\t\t";
        $num = preg_replace('#^\+\K|\D+#','', ltrim($num));//все не цифры кроме первых +
        if (preg_match('#^(?:\d{5,7}|(8|\+?7|(\+?\d))\K\d{10})$#', $num, $m)) {
            echo "valid\t\t",
             var_export($num = (isset($m[2])?$m[2]: (isset($m[1])?'+7':'')). $m[0], 1), "\n---\n";
        }
        else
            echo var_export($num,1), " invalid\n---\n";
 }
output
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
' +4 (888) 888-88-88 '          valid           '+48888888888'
---
' +7 (8888) 88-88-88 '          valid           '+78888888888'
---
' 7 (88888) 8-88-88 '           valid           '+78888888888'
---
' 8 (888) 888-88-88 '           valid           '+78888888888'
---
' 888-88-88 '           valid           '8888888'
---
' 8-88-88 '             valid           '88888'
---
' +7777777  '           '+7777777' invalid
---
Добавлено через 6 минут
Цитата Сообщение от x_lab Посмотреть сообщение
'#^(?:\d{5,7}|(8|\+?7|(\+?\d))\K\d{10})$#'
или '#^(?:\d{5,7}|(8|\+?7||(\+?\d))\K\d{10})$#' ещё для ' (888) 888-88-88 '

Добавлено через 36 минут
загуглил )) возможно бывает ' +299 (888) 888-88-88 '
'#^(?:\d{5,7}|(8|\+?7||(\+?\d{1,3}))\K\d{10})$#'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2021, 02:08
Помогаю со студенческими работами здесь

Регулярное выражения для проверки email
Привет, подскажите хочу протестировать регулярные выражения в email, создал переменную, внес ее, но не хочет работать, может кто в курсе? ...

Регулярное выражения для проверки НЕ начинается со строки
Как написать регулярное выражение, которое проверяет, что строка НЕ начинается с указанной строки Например, чтобы строка не начиналась...

Регулярное выражение для проверки строки на номер автомобиля
Напишите регулярное выражения для проверки строки на: номер автомобиля в формате xYYYxx, где x – буква, y – цифра. Помогите пожалуйста с...

Регулярное выражение для проверки корректности арифметического выражения
В этой теме https://www.cyberforum.ru/csharp-beginners/thread789349.html обсуждалось создание регулярного выражения для проверки введенного...

Регулярное выражение (номер телефона)
Всем привет! Необходимо чтобы регулярка проверяла номер примерно так: 1. начинаться он должен с +7, 8, 7, 9 (т.е. примерно такие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru