我想用javascript:(function(){
var e=document.getElementById('text');
if(e){e.value%20+='Input your Query';}
document.getElementById(Email-textarea');
if(f) {f.value%20+=%20'@gmail.com';}
})();
替换相同数量的不匹配字符。就像我的字符串
*
应该替换为
xyzdsdasdas@xyss.com
现在只是为了解决我使用以下正则表达式
x*********s@x**s.com
因此使用跟随正则表达式和^(\w).*?(.@.).*?(.\.\w+)
一样的
preg_replace
导致
echo preg_replace('/^(\w).*?(.@).*?(\.\w+)/', "$1****$2****$3", "xyzdsdasdas@xyss.com");
但我想在这里实现的是
x****s@x****s.com
答案 0 :(得分:3)
我会使用(*SKIP)(*F)
preg_replace('~(?:^.|.@.|.\.\w+$)(*SKIP)(*F)|.~', '*', $str);
(?:^.|.@.|.\.\w+$)
(*SKIP)(*F)
|
或|
之后的点将匹配跳过的所有字符。答案 1 :(得分:0)
不使用preg_replace,只是为了给你一个想法,我的代码没有优化! (我知道)
$str = 'xyzdsdasdas@xyss.com';
$buff = explode('@', $str);
$buff2 = explode('.', $buff[1]);
$part1 = $buff[0][0] . str_repeat('*', strlen($buff[0]) - 2) . $buff[0][strlen($buff[0]) - 1];
$part2 = $buff[1][0] . str_repeat('*', strlen($buff2[0]) - 2) . $buff2[0][strlen($buff2[0]) - 1];
echo $part1 .'@'. $part2 .'.'. $buff2[1];
但它有效。
答案 2 :(得分:0)
您也可以使用preg_replace_callback
功能
function callbackFunction($m) {
return $m[1].(str_repeat('*', strlen($m[2]))).$m[3].(str_repeat('*', strlen($m[4]))).$m[5];
}
$pattern = '|^(\\w)(.*?)(.@.)(.*?)(.\\.\\w+)|';
$subject = 'xyzdsdasdas@xyss.com';
print_r( preg_replace_callback($pattern, 'callbackFunction', $subject, -1 ) );
答案 3 :(得分:0)
另一次尝试,没有explode
:
<?php
$email="blablabla@truc.com" ;
$arobase_pos = strpos($email,"@"); // first occurence of "@"
$dot_pos = strrpos($email,"."); // last occurence of ".""
// from 2 to post(@) -1
$email = substr_replace($email, str_repeat ("*", $arobase_pos - 2), 1, $arobase_pos - 2);
// from pos(@)+2 to pos(.)-1
$email = substr_replace($email, str_repeat ("*", $dot_pos-1-$arobase_pos-2), $arobase_pos + 2, $dot_pos-1-$arobase_pos-2);
// Display
echo $email;
?>