【问题标题】:Replace number and email with XXXX in a sentence using jQuery使用 jQuery 在句子中用 XXXX 替换数字和电子邮件
【发布时间】:2014-09-27 23:43:19
【问题描述】:

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

示例

$message = "嗨,我是 john,我的个人电话号码是 1213456789,我的电子邮件地址是 john@gmail.com"。

输出:

您好,我是 john,我的个人电话号码是 1213456789,我的电子邮件地址是 john@gmail.com

我希望输出是这样的:

输出:

您好,我是 john,我的个人编号是 XXXXXXX789,我的电子邮件地址是 XXXX@gmail.com

但我现在是这样的:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@gmail.com

我现在使用的函数

function numbers1($str)
{
 if(($until = strpos($str, '@')) !== false)
 {
  $str = str_repeat('X', $until) . substr($str, $until);
 }
}

提前致谢。

【问题讨论】:

  • 你是怎么调用函数的?
  • 首先你如何制作字符串$message?手机和邮件是动态生成的吗?
  • @sgt
  • 如果你这样做是为了保护信息,那么在客户端这样做真的不安全。
  • 是那些没有。 & 电子邮件静态?为什么要使用 jquery?

标签: php jquery codeigniter


【解决方案1】:
$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;

更新 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;

【讨论】:

  • 谢谢 SKRocks。你真的很摇滚。你让我摆脱了头痛。非常感谢。
  • 我在这段代码中遇到了错误。例如:如果电子邮件地址是这样的abc@gmail.com,则结果显示为XXX@gail.com。但是如果电子邮件地址是这样的abc @gmail.com,那么结果是这样的abc @gmail.com**。 jQuery 没有验证 space 我的意思是输出没有变化**。请解决此问题并尽快回复。
  • 在上面的代码中,您可以将电子邮件验证放在第二个 if 条件中。好的,我将它与更新一起发布
  • 以上将仅将xxx转换为有效的电子邮件地址
  • 好的。我现在想做什么?
【解决方案2】:

您正在询问如何使用 jQuery 来执行此操作,但是您的示例代码是用 PHP 编写的。我也会用 PHP sn-p 回答你的问题。

您的函数不起作用的原因是因为您要替换从字符串开头到找到第一个'@'的位置的几乎所有内容。然后,您将添加与字符一样多的“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;

【讨论】:

    【解决方案3】:

    试试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

    【讨论】:

    • 这不适用于723456789 之类的电话号码,您最终会得到7XXXXX789 之类的东西。它是完全编码的。
    • @cafonso 是的。你是对的。它有一些小错误。
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2016-01-07
    • 2012-03-31
    • 2012-10-15
    相关资源
    最近更新 更多