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

如何在javascript和PHP中获取部分电子邮件地址,javascript,php,html,css,Javascript,Php,Html,Css,我正在使用类型脚本(Javascript) 我怎样才能像这样部分隐藏电子邮件地址 杰克。dawson@gmail.com致j******n@g.com 我使用下面的脚本来获得上面的输出。 但是在@之后,我需要得到字符的三分之一。 如果它是一个10个字符的字符串,我只需要显示该字符的三分之一,其余的要屏蔽 let str=”tsadsadsadsadonkjhuhuhuy@gmail.com" str=str.split(“”); 设finalArr=[]; 设len=str.indexOf('

我正在使用类型脚本(Javascript)

我怎样才能像这样部分隐藏电子邮件地址

杰克。dawson@gmail.com致j******n@g.com

我使用下面的脚本来获得上面的输出。 但是在
@
之后,我需要得到字符的三分之一。 如果它是一个10个字符的字符串,我只需要显示该字符的三分之一,其余的要屏蔽

let str=”tsadsadsadsadonkjhuhuhuy@gmail.com"
str=str.split(“”);
设finalArr=[];
设len=str.indexOf('@');
str.forEach((项目,位置)=>{
(在PHP中pos>=3&&pos)

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

  • 我的简单JavaScript解决方案:

    let email=document.getElementById(“email”).innerHTML;
    //您应该在继续之前验证电子邮件格式
    let parts=email.split(“@”);
    设name=parts[0];
    设tld=零件[1];
    设删失=name.charAt(0)+“*****”+name.charAt(name.length-1)
    让结果=删失+“@”+tld子字符串(0,数学层(1/3*tld.length));
    document.getElementById(“已删除”).innerHTML=result;
    thisismytestname@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或JS答案是什么呢?函数掩码($str,$first,$last){$len=strlen($str);$toShow=$first+$last;返回substr($str,0,$len我想在js和php中都使用。请您编辑问题,而不是在评论中发布不可读的代码?以上是我的phpcode@Justinas在@i希望前3个字符和最后1个字符被屏蔽之前,@i希望只有字符串长度的三分之一..com与@i希望前3个字符和最后1个字符相同满足剩余的被屏蔽。在@I之后只需要字符串长度的三分之一字符,剩余的被取消屏蔽。在..com之后,我很抱歉,我不能用这样的描述为您提供一个更令人满意的答案。请在您的问题中提供所有要求的示例,因为您刚刚更改了源代码中的两个要求最后一个问题。我希望输出为“aaa”**********b@one-如果给定的邮件是abcxyz@gmailgamil.com表示输出必须为“abc**z@gma*********.com不客气。我注意到我上面的例子适用于my@example.com域。也可以处理子域,如my@sub.example.com.将第一个第三个函数的返回行更改为:JS:return[result.join(“”),strArray.pop()]和PHP:return[infrade(“”,$result),end($strArray)];
    <?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