为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 javascript 和 PHP 中获取部分电子邮件地址

如何在 javascript 和 PHP 中获取部分电子邮件地址

大话西游666 2023-05-25 15:36:59
我正在使用 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 && pos <= len - 2) ? finalArr.push('*'): finalArr.push(str[pos]);    })    document.write(finalArr.join(''));    console.log(finalArr.join(''))我也在尝试在 php 中执行此操作。我更喜欢 php 和 javascript 中的输出。@我需要在符号之前得到三分之一的字符.com
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

我的简单 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 = result;

<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


?>


查看完整回答
反对 回复 2023-05-25
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这是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


查看完整回答
反对 回复 2023-05-25
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

在PHP中

  1. 用正则表达式提取中间部分:preg_match('\w(?<mid1>.*?)@\w(?<mid2>.*?)\.(?<ext>\w+)', $email, $matches)

  2. 替换为字符串长度的 1/3str_replace($matches['mid1'], str_repeat('*'), strlen($matches['mid1']))

工作示例


查看完整回答
反对 回复 2023-05-25
  • 3 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信