繁体   English   中英

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

[英]How to get the partial email address in javascript and PHP

我正在使用 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之前的@符号之后获得三分之一的字符

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

?>

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

在 PHP 中

  1. 用正则表达式提取中间部分: preg_match('\\w(?<mid1>.*?)@\\w(?<mid2>.*?)\\.(?<ext>\\w+)', $email, $matches)
  2. 替换为字符串长度的 1/3 str_replace($matches['mid1'], str_repeat('*'), strlen($matches['mid1']))

工作示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM