@IdFox

Как подсветить цифры в номере телефона с заданным форматированием?

Всем привет
Подскажите как решить задачу на PHP?
Так вроде бы простая, но как подойти не знаю...
Есть номер, допустим 987 123-45-67 (задано форматирование)
Может как вариант еще 987 (123) 45-67 ну и т.д
И нужно выделить цифры по маске (регулярке)
Т.е например маска #23.56#is
Задача - как подсветить указанные цифры в номере (css классом), сохранив при этом форматирование номера исходное?
Нужно получить 987 1<span class="class">23-45-6</span>7
Т.е берем входной номер, режем все кроме цифр, по заданной регулярке подсвечиваем, это все понятно
А как теперь восстановить исходное форматирование?
Подскажите как решить, чет не могу даже понять с какой стороны подойти :)
Всем спасибо
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
prototype_denis
@prototype_denis
Symfony
<?php

// no mask, only pattern
$patterns = [
    '/23.56/is',
    '/99(\d+)8/is', // /99*8/is no correct pattern
];

$data = [
    '987 (123) 45-67',
    '799 125 4785',
];

foreach ($data as $value) {
    foreach ($patterns as $pattern) {
        $map = [0 => [], 1 => []];
        foreach (preg_split('//u', $value, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY) as $index => $char) {
            $map[(int) is_numeric($char)][$index] = $char;
        }
        foreach (array_combine(array_keys($map[1]), preg_split('//u', preg_replace_callback($pattern, function ($matches) {
            return str_repeat('#', count(preg_split('//u', $matches[0], 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY)));
        }, join($map[1])), 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY)) as $index => $char) {
            $map[0][$index] = '#' === $char ? '<span>'.$map[1][$index].'</span>' : $char;
        }
        ksort($map[0]);
        echo join($map[0]).PHP_EOL;
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
1. Хранить в data атрибутах или вообще в href
<a id="phone" href="tel:9871234567" data-base-phone="987 123-45-67">
987 <span class="red">123</span>-45-67
</a>

2. Хранить в webStorage
https://www.w3schools.com/html/html5_webstorage.asp
3. Создать объект в js
var phone = {
clear: '9871234567', 
formated: '987 123-45-67'
.....
};

4. Сделать rest api посылать ajax получать в любых позах /someController/get-phone?id=1&type=clear&tags=0
Наверное еще 10 более экзотичных вариантов можно придумать, с сессией, с базой данных с куками и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы