#javascript #php #html #css
#javascript #php #HTML #css
Вопрос:
Я использую TypeScript (Javascript)
Как я могу частично скрыть адрес электронной почты таким образом?
jack.dawson@gmail.com к j*****n@g.com
Я использую приведенный ниже скрипт для получения вышеуказанного результата. Но после @
того, как мне нужно получить одну треть символа. например: если это строка из 10 символов, мне нужно, чтобы отображалась только одна треть символа, а оставшаяся часть была замаскирована.
let str = "tsadsadsadsadonkjhuhuhuy@gmail.com"
str = str.split('');
let finalArr = [];
let len = str.indexOf('@');
str.forEach((item, pos) => {
(pos >= 3 amp;amp; pos <= len - 2) ? finalArr.push('*'): finalArr.push(str[pos]);
})
document.write(finalArr.join(''));
console.log(finalArr.join(''))
Я также пытаюсь сделать это на php.
Я предпочитаю вывод как на php, так и на javascript.
Мне нужно получить одну треть символа после @
символа, прежде чем .com
Комментарии:
1. Итак, вы ищете ответ на PHP или JS?
2. маска функции ($str, $first, $last) {$len = strlen($str);$toShow = $first $last; возвращает substr($str, 0, $len <= $toShow ? 0: $first).str_repeat(«*», $len — ($len <= $toShow? 0: $toShow)).substr($str, $len — $last, $len <= $toShow ? 0: $last);} функция mask_email($email) {$mail_parts = explode(«@», $email);$domain_parts = explode(‘.’, $mail_parts[1]); $mail_parts[0] = маска ($mail_parts[0], 3, 1); // показать первые 2 буквы и последнюю 1 букву$domain_parts[0] = маска ($domain_parts[0], 2, 0); // то же самое здесь$mail_parts[1] = implode(‘.’, $domain_parts); возвращает implode(«@», $mail_parts);}
3. Я хочу как в js, так и в php.
4. Пожалуйста, вы можете отредактировать вопрос, а не публиковать нечитаемый код в комментариях?
5. Выше приведен мой php-код
Ответ №1:
Мое простое решение на JavaScript:
let email = document.getElementById("email").innerHTML;
//You should validate email format before proceeding
let parts = email.split("@");
let name = parts[0];
let tld = parts[1];
let censored = name.charAt(0) "****" name.charAt(name.length-1)
let result = censored "@" tld.substring(0, Math.floor(1/3*tld.length));
document.getElementById("censored").innerHTML = resu<
<span id="email">thisismytestname@example.com</span><br>
<span id="censored"></span>
Решение PHP работает по существу так же:
<?php
$email = "myemail@test.com";
//Should validate email format before proceeding
$parts = explode("@", $email);
$name = $parts[0];
$tld = $parts[1];
$censored = substr($name, 0, 1) . "****" . substr($name,-1);
$result = $censored . "@" . substr($tld, 0, floor(1/3*strlen($tld)));
echo $result; //echoes t****e@example.com
?>
Комментарии:
1. Перед @ я хочу, чтобы 1-й символ 3 и последний оставшийся символ 1 были замаскированы. После @ я хочу, чтобы только один третий символ длины строки и оставшийся был снят. After..com быть таким, какой он есть
2. Извините, я не могу предоставить вам более удовлетворительный ответ с таким описанием vage. Пожалуйста, приведите примеры в вашем вопросе со всеми требованиями, поскольку вы только что изменили два требования из исходного вопроса.
3. Я хочу, чтобы вывод был «aaa********** b@одна треть от фактического character.com . Например: если данное письмо abcxyz@gmailgamil.com означает, что вывод должен быть таким, как «abc ** z @ gma*********. ком
Ответ №2:
Вот JS:
const firstAndLast = str => {
const firstChar = str.substring(0,3);
const lastChar = str.slice(-1);
return [firstChar, lastChar]
}
const firstThird = str => {
const strArray = str.split(".");
const result = []
for (let i = 0; i < (strArray[0].length 1)/3; i ) {
result.push(str[i])
}
return [result.join(''), strArray[1]]
}
const str = "tsadsadsadsajhuhuhuy@gmail.com"
const strArray = str.split("@");
const [userFirst, userLast] = firstAndLast(strArray[0])
const [domainFirst, domainLast] = firstThird(strArray[1])
console.log(`${userFirst}****${userLast}@${domainFirst}***.${domainLast}`)
Вот PHP:
<?php
function firstAndLast($str) {
$firstChar = substr($str, 0, 3);
$lastChar = substr($str, -1);
return [$firstChar, $lastChar];
}
function firstThird($str) {
$strArray = explode(".", $str);
$result = [];
$str_length = (strlen($strArray[0]) 1)/3;
for ($i = 0; $i < $str_length; $i ) {
array_push($result, $str[$i]);
}
return [implode('', $result), $strArray[1]];
}
$str = "tsadsadsadsajhuhuhuy@gmail.com";
$strArray = explode("@", $str);
$user = firstAndLast($strArray[0]);
$domain = firstThird($strArray[1]);
echo $user[0].'****'.$user[1].'@'.$domain[0].'***.'.$domain[1];
Оба превращают ваш пример электронной почты в:
tsa****y@gm***.com
Комментарии:
1. Приветствую вас. Я заметил, что мой приведенный выше пример работает для my@example.com домены. Также обрабатывать поддомены, такие как my@sub.example.com . Измените первую третью строку возврата функции на: JS: return [result.join(«), strArray.pop()] и PHP: return [implode(«, $result), end($strArray)];
Ответ №3:
В PHP
- Извлеките средние части с помощью регулярного выражения:
preg_match('w(?<mid1>.*?)@w(?<mid2>.*?).(?<ext>w )', $email, $matches)
- Заменить на 1/3 длины строки
str_replace($matches['mid1'], str_repeat('*'), strlen($matches['mid1']))
Комментарии:
1. @Justinas Перед @ я хочу, чтобы 1-й символ 3 и последний оставшийся 1 символ были замаскированы. После @ мне нужна только одна треть строки length..com быть таким, какой он есть