3 回答

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">[email protected]</span><br>
<span id="censored"></span>
PHP 解決方案工作方式基本相同:
<?php
$email = "[email protected]";
//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****[email protected]
?>

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 = "[email protected]"
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 = "[email protected]";
$strArray = explode("@", $str);
$user = firstAndLast($strArray[0]);
$domain = firstThird($strArray[1]);
echo $user[0].'****'.$user[1].'@'.$domain[0].'***.'.$domain[1];
兩者都將您的示例電子郵件變成:
tsa****y@gm***.com

TA貢獻1887條經驗 獲得超5個贊
在PHP中
用正則表達式提取中間部分:
preg_match('\w(?<mid1>.*?)@\w(?<mid2>.*?)\.(?<ext>\w+)', $email, $matches)
替換為字符串長度的 1/3
str_replace($matches['mid1'], str_repeat('*'), strlen($matches['mid1']))
添加回答
舉報