Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 140
1

не получается добить регулярку

12.09.2016, 14:35. Показов 1030. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую форумчане! Есть список тел.номеров :
84951234567
+74951234567
8-495-1-234-567
8 (8122) 56-56-56
8-911-1234567
8 (911) 12 345 67
8-911 12 345 67
8 (911) - 123 - 45 - 67
+ 7 999 123 4567
8 ( 999 ) 1234567
8 999 123 4567

задание такое: сначала идет +7 или 8, за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов. Так вот столкнулся с проблемой как мне найти именно 10 цифр минуя символы. Сам сумел сделать чтобы искал неограниченное кол-во цифр и символов.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Правильные: 
$correctNumbers = [ 
  '84951234567',  '+74951234567', '8-495-1-234-567', 
  ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', 
  '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', 
  '8 ( 999 ) 1234567', '8 999 123 4567'
];
 
// Неправильные: 
$incorrectNumbers = [
  '02', '84951234567 позвать люсю', '849512345', '849512345678', 
  '8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
  '84951a234567', '8495123456a', 
  '+1 234 5678901', /* неверный код страны */
  '+8 234 5678901', /* либо 8 либо +7 */
  '7 234 5678901' /* нет + */
];
 
 
 
 
 
 
$regexp = "/[\-?|\s?\+?78]+[(\s\-\(\))*\d]+/ui";
 
// строки, к которым мы будем по очереди применять регулярку
 
 
foreach ($correctNumbers as $value) {
    
 
    // сюда будет помещено первое
    // совпадение с шаблоном
    $match = [];
    if (preg_match($regexp, $value, $match)) {
 
        echo "{$match[0]}<br>";
    } else {
        echo "- Ничего не найдено<br>";
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2016, 14:35
Ответы с готовыми решениями:

Не получается написать регулярку
неполучаеться написать регулярку для сбора картинок на mail.ru нужно взять только...

Как добить прожку
Как дописать программу на делфи: Дана строка, состоящая из групп нулей и единиц. Найти и вывести на...

Нужно добить программу в С++
Помогите добить программу в С++ Задание: В каждом из массивов найти наименьшее значение и...

Не могу добить прогу
И снова здравствуйте. Дано задание: &gt;Дана последовательность целых чисел {Aj} произвольной длины....

6
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.09.2016, 15:07 2
Замена в номере телефона
там конечно несколько не так, но поправить, наверное, будет проще
0
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 140
12.09.2016, 15:09  [ТС] 3
Это да, но там все-таки замена идет. Хочется найти способ без замены именно.только preg_match
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.09.2016, 15:12 4
Цитата Сообщение от tager3 Посмотреть сообщение
но там все-таки замена идет
Где? По ссылке нет никаких замен с этой регуляркой
1
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
12.09.2016, 16:40 5
PHP
1
2
// Если не очень строго но максимально компактно
$regexp = '/^ ?(\+ ?7|8)([- ()]*\d){10}$/';
1
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
12.09.2016, 16:50 6
хм
PHP
1
2
3
$str = '8 (911) - 123 - 45 - 67';
$clear = preg_replace("~[^\d+]~", '', $str);
echo preg_match("~^(\+7)|(8)\d{10}$~", $clear) ? $clear : 'Invalid number';
0
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 140
12.09.2016, 16:52  [ТС] 7
Emilien, Спасибо работает, теперь буду разбирать по полочкам как так получилось

Добавлено через 1 минуту
mrNTF, у Вас с используется preg_replace , задача состоит в использовании только preg_match

Добавлено через 1 минуту
KOPOJI, извиняюсь , действительно не туда посмотрел, ваш вариант можно рассмотреть но быстро перебрать под свой у меня не получилось,опыта видимо не хватает и много непонятностей
0
12.09.2016, 16:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2016, 16:52
Помогаю со студенческими работами здесь

нуна добить тупую прогу
Дан бесконечный ряд заданный &quot; e^(-1)= 1 - x + (x^2/2!)-(x^3/3!)+(x^4/4!)-...&quot; |x|&lt;1. Написать на...

как добить тИЦ до высот?
Без умысла и выгоды хочу задать мучающий меня уже довольно долго вопрос. Каким образом люди делают...

Не смог добить бан вирус
Здравствуйте,у меня появл. баннер вирус Антивирус касперского онлайн отправ. смс и т.д.Безопас....

ERwin-диаграмма пытаюсь добить задание!
По условию есть некий гараж в котором работают водилы, к которым приписываются машины, после чего...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru