Как получить частичный адрес электронной почты в javascript и PHP

#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

  1. Извлеките средние части с помощью регулярного выражения: preg_match('w(?<mid1>.*?)@w(?<mid2>.*?).(?<ext>w )', $email, $matches)
  2. Заменить на 1/3 длины строки str_replace($matches['mid1'], str_repeat('*'), strlen($matches['mid1']))

Рабочий пример

Комментарии:

1. @Justinas Перед @ я хочу, чтобы 1-й символ 3 и последний оставшийся 1 символ были замаскированы. После @ мне нужна только одна треть строки length..com быть таким, какой он есть