我想替换句子中的数字和电子邮件。
$message = "你好,我是john,我的个人号码是1213456789,我的电子邮件地址是john@gmail.com"
输出:你好,我是john,我的个人号码是1213456789,我的电子邮件地址是john@gmail.com
我希望输出是这样的:
输出:你好,我是john,我的私人号码是XXXXXXX789,我的电子邮件地址是XXXX@gmail.com
但是我现在是这样的:
我现在使用的XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@gmail.com
函数
function numbers1($str)
{
if(($until = strpos($str, '@')) !== false)
{
$str = str_repeat('X', $until) . substr($str, $until);
}
}
try preg_replace()
$str = "Hi this is john, my personal no is 1213456789 and my email address is john@gmail.com";
$replacements[1] = 'X';
$replacements[0] = 'XXXX@';
echo preg_replace(array('/[0-6]/', '/[ a-z]{0,4}+@/'), $replacements, $str);
输出:- Hi this is john, my personal no is XXXXXXX789 and my email address is XXXX@gmail.com
$message = "Hi this is john, my personal no is 1213456789 and my email address is john@gmail.com";
$arr = explode(" ", $message);
foreach($arr as $key=>$val)
{
if(!preg_match ("/[^0-9]/", $val))
{
$val_new = "XXXXXXX".substr($val, -3);
$arr[$key] = $val_new;
}
else if(strpos($val, "@")>0)
{
$arr_email = explode("@", $val);
$arr_email[0] = "XXXX";
$val_new = implode("@", $arr_email);
$arr[$key] = $val_new;
}
}
$new_msg = implode(" ", $arr);
echo $new_msg;
UPDATE 2:
$message = "Hi this is john, my personal no is 1213456789 and my email address is john@gmail.com";
$arr = explode(" ", $message);
foreach($arr as $key=>$val)
{
if(!preg_match ("/[^0-9]/", $val))
{
$val_new = "XXXXXXX".substr($val, -3);
$arr[$key] = $val_new;
}
else if(preg_match ("/^[a-z0-9_'+-]+('.[a-z0-9_'+-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*'.([a-z]{2,4})$/", $val))
{
$arr_email = explode("@", $val);
$arr_email[0] = "XXXX";
$val_new = implode("@", $arr_email);
$arr[$key] = $val_new;
}
}
$new_msg = implode(" ", $arr);
echo $new_msg;
您问如何使用jQuery做到这一点,但是您的示例代码是用PHP编写的。我也会用一个PHP代码片段来回答你的问题。
你的函数不工作的原因是因为你替换了几乎所有的东西,从字符串的开始到第一个"@"被找到的位置。然后添加尽可能多的"X"字符,直到该位置,然后是字符串的其余部分。更复杂的是,如果在字符串中找到两个或更多的电子邮件地址,这将不起作用。
这样就可以了。不过,您可能需要调整电话号码和电子邮件地址的正则表达式:
$message = "Hi this is john, my personal no is 1213456789 and my email address is john@gmail.com";
// get all phone numbers
preg_match('/'d{3,}/s', $message, $phones);
// get all email addresses
preg_match('/[a-z.-]+@[a-z.-]+/s', $message, $emails);
foreach ($phones as $phone)
{
$message = str_replace($phone, str_repeat('X', strlen($phone) - 3) . substr($phone, -3), $message);
}
foreach ($emails as $email)
{
$parts = explode('@', $email);
$message = str_replace($email, str_repeat('X', strlen($parts[0])) . '@' . $parts[1], $message);
}
// Hi this is john, my personal no is XXXXXXX789 and my email address is XXXX@gmail.com
echo $message;