使用jQuery将句子中的数字和电子邮件替换为XXXX


Replace number and email with XXXX in a sentence using jQuery

我想替换句子中的数字和电子邮件。

$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;