将电子邮件地址中的用户名部分替换为星号

时间:2015-07-08 11:51:00

标签: php regex

如何将电子邮件地址中的用户名转换为星号。用户名中的第一个和最后一个字母保持原样,其余部分替换为(*)。

示例:

mhyunf@gmail.com

进入

m****f@gmail.com

4 个答案:

答案 0 :(得分:9)

你可以用环顾四周来做。

/(?!^).(?=[^@]+@)/
  • (?!^)背后的负面看法。检查字符是否前面没有字符串的开头。这可确保不选择第一个字符。

  • .匹配单个字符。

  • (?=[^@]+@)积极向前看。确保匹配的单个字符后跟@以外的任何内容(由[^@]确保),然后是@

Regex Demo

示例

preg_replace("/(?!^).(?=[^@]+@)/", "*", "mhyunf@gmail.com")
=>  m****f@gmail.com

答案 1 :(得分:0)

您可以替换以下正则表达式:

/^([a-zA-Z])[^@]*([a-zA-Z].*)$/

with:

/\1****\2/

答案 2 :(得分:0)

或者如果你不想使用正则表达式,你可以做这样的事情

/webroot/js

答案 3 :(得分:0)

function hideEmail($email, $domain_ = false){

    $seg = explode('@', $email);
    $user = '';
    $domain = '';

    if (strlen($seg[0]) > 3) {
        $sub_seg = str_split($seg[0]);
        $user .= $sub_seg[0].$sub_seg[1];
        for ($i=2; $i < count($sub_seg)-1; $i++) { 
            if ($sub_seg[$i] == '.') {
                $user .= '.';
            }else if($sub_seg[$i] == '_'){
                $user .= '_';
            }else{
                $user .= '*';
            }
        }
        $user .= $sub_seg[count($sub_seg)-1];
    }else{
        $sub_seg = str_split($seg[0]);
        $user .= $sub_seg[0];
        for ($i=1; $i < count($sub_seg); $i++) { 
            $user .= ($sub_seg[$i] == '.') ? '.' : '*';
        }
    }

    $sub_seg2 = str_split($seg[1]);
    $domain .= $sub_seg2[0];
    for ($i=1; $i < count($sub_seg2)-2; $i++) { 
        $domain .= ($sub_seg2[$i] == '.') ? '.' : '*';
    }

    $domain .= $sub_seg2[count($sub_seg2)-2].$sub_seg2[count($sub_seg2)-1];

    return ($domain_ == false) ? $user.'@'.$seg[1] : $user.'@'.$domain ;

}