Помогите составить регулярное выражение, которое проверяет строку на то, чтобы в ней были только цифры(от 7 до 15), но также среди цифр могли бы быть символы "-", "(", ")", " "(пробел). Причем пробелов и символов "-" было не больше 5, а каждой из скобочек не больше 1. Например 053654895665, или 96(8) 956-17-26
Например 053654895665, или 96(8) 956-17-26
Для вашего примера подойдёт такой вариант:
$str = 'Например 053654895665, или 96(8) 956-17-26';
preg_match_all('~\b(?:\d{7,15}|\d{2}\(\d\)\s?\d{3}(?:-\d{2}){2})\b~', $str, $arr);
var_dump($arr);
UPD: Вариант с учётом списка номеров:
$str = '+375296398545
+375(29)6398545
375296398545
375-29-639-85-45
+375-29-639-85-45
+375(29)639-85-45
375(29)639-85-45
375(29)639 85 45
+375 29 639 85 45
375 29 6398545';
$patt = '~
\b \+? (?:
# +375296398545 или 375296398545
\d{7,15} |
# +375(29)6398545
\d{3} \( \d{2} \) \d{7} |
# 375-29-639-85-45
(?: \d{3}- \d{2}- ){2} \d{2} |
# +375(29)639-85-45 и все остальные
\d{3} [\h(] \d{2} [\h)] \d{3} (?: [\h-]? \d{2} ){2}
)\b
~x';
preg_match_all($patt, $str, $arr);
print_r($arr);
Результат (все номера из списка):
Array
(
[0] => Array
(
[0] => 375296398545
[1] => 375(29)6398545
[2] => 375296398545
[3] => 375-29-639-85-45
[4] => 375-29-639-85-45
[5] => 375(29)639-85-45
[6] => 375(29)639-85-45
[7] => 375(29)639 85 45
[8] => 375 29 639 85 45
[9] => 375 29 6398545
)
)
P.S.: Всё не предусмотреть.
Валидация телефона это дно, так как в Америке и других странах могут быть телефоны с буквами, это сравнимо с валидацией имени и фамилии. Не понимаю почему заказчики думают, что человек не в состоянии написать свои ФИО, это абсурд.
Ну, как алгоритм, могу предложить следующее:
// удалим разрешенные символы из строки
$phoneCheck = str_replace(['+', ' ', ')', '(', '-'], '', $phone);
// далее приводим к integer
$phoneCheckSumm = (int) $phoneCheck;
// сравниваем две переменные
if($phoneCheck == $phoneCheckSumm && $phoneCheck >= 7 && $phoneCheck <= 15) {
echo 'все верно';
} else {
echo 'что то не так';
}
Логика проста, если при проведение к типу integer php отсечет буквы, либо символы, то переменные не будут равны. В общем лучше не валидировать такие вещи, ибо это создаст больше неудобства чем пользы для пользователя
p.s. 15 это не цифра, а число, так что задача неверна.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В админке по умолчанию выбрана валюта USD, и в настройках локализации выбрано значение для доллара 100000000
Может кто-то подсказать как перехватить данные с формы, которая находиться в корзине, для оформления заказаКомпонент для каталога и корзины...
Нужно оптимизировать изображения так чтобы проходить проверку Gtmetrix или Google PageSpeed Insights (результат у них одинаковый), для этого использую php расширение...