Как заменить номер мобильного телефона звездами, кроме последних 4 цифр в php - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь заменить номер мобильного телефона звездочками, кроме последних 4 цифр в тексте, и текст является динамическим.

Eg. John's Mobile number is 8767484343 and he is from usa.
Eg. John's Mobile number is +918767484343 and he is from india.
Eg. Sunny's Mobile number is 08767484343 and he is from india.
Eg. Rahul's Mobile number is 1800-190-2312 and he is from india.



$dynamic_var = "John's Mobile number is 8767484343 and he is from usa.";

$number_extracted = preg_match_all('!\d+!', $dynamic_var , $contact_number);

// don't know what to do next
Result will be like 
Eg. John's Mobile number is ******4343 and he is from usa.
Eg. John's Mobile number is ******4343 and he is from india.
Eg. Sunny's Mobile number is ******4343 and he is from india.
Eg. Rahul's Mobile number is ******2312 and he is from india.

Ответы [ 2 ]

1 голос
/ 13 июля 2019

Исходя из того, что я вижу из вашего примера ввода и желаемого результата, вам не нужны служебные данные preg_replace_callback(). Предварительный просмотр переменной длины позволит вам заменять один символ за раз звездочкой, если за ним следуют 4 или более цифр или переносов.

Код: ( Демо )

$inputs = [
    "John's Mobile number is 8767484343 and he is from usa.",
    "John's Mobile number is +918767484343 and he is from india.",
    "Sunny's Mobile number is 08767484343 and he is from Pimpri-Chinchwad, india.",
    "Rahul's Mobile number is 1800-190-2312 and he is from india."
];

var_export(preg_replace('~[+\d-](?=[\d-]{4})~', '*', $inputs));

Выход:

array (
  0 => 'John\'s Mobile number is ******4343 and he is from usa.',
  1 => 'John\'s Mobile number is *********4343 and he is from india.',
  2 => 'Sunny\'s Mobile number is *******4343 and he is from Pimpri-Chinchwad, india.',
  3 => 'Rahul\'s Mobile number is *********2312 and he is from india.',
)

Я мог бы придумать некоторые дополнительные случаи, которые не будут обрабатываться моим фрагментом, но всякий раз, когда вы имеете дело с номером телефона, который не подчиняется строгому формату, вы спускаетесь по кроличьей норе вызовов.

1 голос
/ 11 июля 2019

Вы можете достичь этого прямо из вашего $ dynamic_var, например, так:

$dynamic_var = "John's Mobile number is 8767484343 and he is from usa.";
$result = preg_replace_callback('/(?<=\s)(\d|-|\+)+(?=\d{4}\s)/U', function($matches) {
    return str_repeat("*", strlen($matches[0]));
}, $dynamic_var);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...