Как на PHP скрывать часть текста в зависимости от количества символов?
Как на PHP скрывать часть текста в зависимости от количества символов?
Звездочек должно быть всегда 8!
Если цифр 7 и больше, то отображать 3 первых и 3 последних
Если цифр 5 или 6, то отображать 2 первых и 2 последних
Если цифр 3 или 4, то отображать 1 первую и 1 последнюю
Если цифр 2, то отображать 1 первую
Если цифр 1, то отображать ее и отобразить
$key = "12345678901234567890"; // 123********890
$key = "1123456789012345678232190"; // 112********190
$key = "1145234140"; // 114********140
$key = "103482"; // 10********82
$key = "534"; // 5********4
$key = "28"; // 2********
$key = "7"; // 7
Еще возможно ее как то коротким кодом сделать, чтобы вставлять в любое место к коде?
Ответы (2 шт):
Как вариант, можно использовать данную функцию:
function YourNameFunction($str)
{
$arr = str_split($str);
$newstr = "";
if(count($arr) >= 7) {
$newstr = $arr[0].$arr[1].$arr[2]."********".$arr[count($arr) - 3].$arr[count($arr) - 2].$arr[count($arr) - 1];
} elseif(count($arr) >= 5) {
$newstr = $arr[0].$arr[1]."********".$arr[count($arr) - 2].$arr[count($arr) - 1];
} elseif(count($arr) >= 3) {
$newstr = $arr[0]."********".$arr[count($arr) - 1];
} elseif(count($arr) == 2) {
$newstr = $arr[0]."********";
} elseif(count($arr) == 1) {
$newstr = $arr[0];
}
return $newstr;
}
Так-же можно сократить код, чтобы убрать $arr[count($arr) - 3]
Вот более читабельная функция
function YourNameFunction($str)
{
$arr = str_split($str);
$newstr = "********";
if(count($arr) > 2) {
$n = 1;
if(count($arr) >= 7) {
$n = 3;
} elseif(count($arr) >= 5) {
$n = 2;
}
for($i = $n; $i > 0; i--) {
$newstr = $arr[$i].$newstr.$arr[count($arr) - $i];
}
} elseif(count($arr) == 2) {
$newstr = $arr[0].$newstr;
} else {
$newstr = $str;
}
return $newstr;
}
Немного улучшенная функция с if'ами
function hideNumber($string, $countFirstNumbersToShow = 1, $countLastNumbersToShow = 1, $countOfStars = 8) {
return substr($string, 0, $countFirstNumbersToShow) . str_repeat('*', $countOfStars) . ($countLastNumbersToShow === 0 ? '' : substr($string, -$countLastNumbersToShow));
}
function someFunction($string) {
$stringLength = strlen($string);
if ($stringLength >= 7) {
$newStr = hideNumber($string, 3, 3);
} elseif ($stringLength >= 5) {
$newStr = hideNumber($string, 2, 2);
} elseif ($stringLength >= 3) {
$newStr = hideNumber($string, 1, 1);
} elseif ($stringLength == 2) {
$newStr = hideNumber($string, 1, 0);
} elseif ($stringLength == 1) {
$newStr = hideNumber($string, 1, 0, 0);
}
return $newStr;
}
UPD Функция someFunction с помощью match (появился в PHP8), а hideNumber без изменений
function someFunction($string) {
$stringLength = strlen($string);
return match (true) {
$stringLength >= 7 => hideNumber($string, 3, 3),
$stringLength >= 5 => hideNumber($string, 2, 2),
$stringLength >= 3 => hideNumber($string, 1, 1),
$stringLength === 2 => hideNumber($string, 1, 0),
$stringLength === 1 => hideNumber($string, 1, 0, 0),
};
}