2017-06-01 139 views
2

我需要在查看特定页面时检查电子邮件地址,以便第一个字母可见并且@符号可见,但其余部分使用*进行审查,如下例所示:将所有字符替换为*除指定字符以外*

v ******** @ *********

我该如何去做这件事?我无法找到任何答案(或者我只是没有使用正确的东西)。

+0

这似乎有点特殊找到一个准备上使用脚本谷歌。如果你自己写剧本,你会怎么做? – Halcyon

+0

与循环方法 该链接将有所帮助https://stackoverflow.com/questions/8163746/how-to-replace-certain-parts-of-my-string –

+0

保持第一个字符很容易使用substr()但我不知道我需要做什么正则表达式。一个电子邮件地址可以有字母和数字,但是我发现任何正则表达式都不能阻止@符号被替换。 – VenomRush

回答

4

简短而亲切一个班轮:

$result = substr($str, 0, 1) . preg_replace('/[^@]/', '*', substr($str, 1)); 
  1. substr($str, 0, 1)获取字符串的第一个字符例如v
  2. preg_replace('/[^@]/', '*', substr($str, 1))替换从第一个字符开始的不是@符号的所有内容。

eval.in demo。

+1

你确定@arkascha?请检查这[eval.in](https://eval.in/809334) –

+0

这工作正是我想要的。我一看到Jenne van der Meer对我的帖子发表评论,我就做了同样的事情。 – VenomRush

+0

@大卫你是对的,我很抱歉。我的错。 – arkascha

0
<?php 

$email = "[email protected]"; 

// Split into name and domain 
$pieces = explode("@", $email); 

// Add the first letter 
$censored = substr($email, 0, 1); 

// Add the name stars 
for ($i = 1; $i <= strlen($pieces[0]) - 1; $i++) { 
    $censored = $censored."*"; 
} 

// Add the @ sign 
$censored = $censored."@"; 

// Add the domain stars 
for ($i = 1; $i <= strlen($pieces[1]); $i++) { 
    $censored = $censored."*"; 
} 

echo $censored; 
0

用正则表达式和str_pad?
使用正则表达式来捕获第一个字母,然后剩下的部分。
使用str_pad在字符串中添加“*”。

​​

$mail = "[email protected]"; 

preg_match("/(.)(.*?)@(.*)/", $mail, $Match); 

$str = $Match[1] . str_pad("", strlen($Match[2]), "*"). "@" . str_pad("", strlen($Match[3]), "*"); 
echo $str; 
0

使用回调重组字符串:

<?php 
$subject = '[email protected]'; 
$subject = preg_replace_callback('/^(.)(.*)@(.*)$/', function($m) { 
    return sprintf(
    '%s%[email protected]%s', 
    $m[1], 
    str_pad('', strlen($m[2]), '*'), 
    str_pad('', strlen($m[3]), '*') 
); 
}, $subject); 
var_dump($subject); 

输出显然是:

string(19) "s******@***********" 
相关问题