我需要在查看某个页面时审查电子邮件地址,以便第一个字母可见且@符号可见,但其余部分使用*进行审查,如下例所示:
v ******** ********* @
我该怎么做呢?我找不到任何答案(或者我可能不是谷歌搜索正确的东西)。
答案 0 :(得分:4)
短而甜的单线:
$result = substr($str, 0, 1) . preg_replace('/[^@]/', '*', substr($str, 1));
substr($str, 0, 1)
获取字符串的第一个字符,例如v
。preg_replace('/[^@]/', '*', substr($str, 1))
会替换第一个字符以后的所有内容,而不是@
符号。eval.in演示。
答案 1 :(得分:0)
<?php
$email = "vmail@vmail.com";
// 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;
答案 2 :(得分:0)
使用正则表达式和str_pad?
使用正则表达式捕获第一个字母,然后将其余部分分成几部分
使用str_pad在字符串中添加“*”。
$mail = "Test@test.com";
preg_match("/(.)(.*?)@(.*)/", $mail, $Match);
$str = $Match[1] . str_pad("", strlen($Match[2]), "*"). "@" . str_pad("", strlen($Match[3]), "*");
echo $str;
答案 3 :(得分:0)
使用重新组合字符串的回调:
<?php
$subject = 'someone@example.com';
$subject = preg_replace_callback('/^(.)(.*)@(.*)$/', function($m) {
return sprintf(
'%s%s@%s',
$m[1],
str_pad('', strlen($m[2]), '*'),
str_pad('', strlen($m[3]), '*')
);
}, $subject);
var_dump($subject);
输出显然是:
string(19) "s******@***********"