将所有字符替换为*除指定字符以外*
问题描述:
我需要在查看特定页面时检查电子邮件地址,以便第一个字母可见并且@符号可见,但其余部分使用*进行审查,如下例所示:将所有字符替换为*除指定字符以外*
v ******** @ *********
我该如何去做这件事?我无法找到任何答案(或者我只是没有使用正确的东西)。
答
简短而亲切一个班轮:
$result = substr($str, 0, 1) . preg_replace('/[^@]/', '*', substr($str, 1));
-
substr($str, 0, 1)
获取字符串的第一个字符例如v
。 -
preg_replace('/[^@]/', '*', substr($str, 1))
替换从第一个字符开始的不是@
符号的所有内容。
eval.in demo。
答
<?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;
答
用正则表达式和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;
答
使用回调重组字符串:
<?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******@***********"
这似乎有点特殊找到一个准备上使用脚本谷歌。如果你自己写剧本,你会怎么做? – Halcyon
与循环方法 该链接将有所帮助https://*.com/questions/8163746/how-to-replace-certain-parts-of-my-string –
保持第一个字符很容易使用substr()但我不知道我需要做什么正则表达式。一个电子邮件地址可以有字母和数字,但是我发现任何正则表达式都不能阻止@符号被替换。 – VenomRush