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

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

17.03.2021, 22:53. Показов 822. Ответов 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
3112 / 1291 / 359
Регистрация: 08.02.2013
Сообщений: 7,569
Записей в блоге: 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 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru