如何用' x'替换mysql列中的某些字符?

时间:2016-05-20 06:20:09

标签: php mysql

我有这样的电子邮件

uuak6G6GgD@gmail.com
d3lferM@gmail.com
Efqc9@gmail.com

如何转换和选择这样的。

uuakxxxxxx@xxxxx.xxx
d3lfxxx@xxxxx.xxx
Efqcx@xxxxx.xxx

是的我能够得到这个值但是,我在mysql函数方面还不够好所以请尽可能让它变得简单和简短。并且还建议了其他解决方案。

我已将查询创建为

 SELECT CONCAT(LEFT(email,
 4),SUBSTR(REGEXP_REPLACE(email,'[a-z0-9]',"x"),5)),email
 FROM `users`

我使用PHP作为服务器端,所以如果我们可以让php足够好,请同时建议。

您的帮助和建议非常明显。

5 个答案:

答案 0 :(得分:5)

如果该点是电子邮件地址的混淆,那么您不应该用x替换字符,从而指示电子邮件地址的长度。只需取前4个字符(左()函数)并添加固定的结尾“xxxxxxxx@xxxx.xxx”。您还需要决定如何处理用户部分短于4个字符的电子邮件地址。

答案 1 :(得分:1)

如果您想使用PHP实现此目的,您只需使用以下regex以及preg_replace功能,如

(^(\w){1,4}|@|\.)(*SKIP)(*F)|(.)

示例:

echo preg_replace("/(^(\w){1,4}|@|\.)(*SKIP)(*F)|(.)/","$1x","uuak6G6GgD@gmail.com");

答案 2 :(得分:0)

$emails = [
    'uuak6G6GgD@gmail.com',
    'd3lferMGo7@gmail.com',
    'Efqc90dUGI@gmail.com',
    'I@gmail.com',
];

$modded = [];
foreach ($emails as $item) {
    $name = explode('@', $item);
    $name = str_pad(substr($name[0], 0, 4), 4, "x");
    $modded[] = $name . 'xxxx@xxx.xxx';
}

var_dump($modded);

答案 3 :(得分:0)

我会建议像:

$email = substr($email, 0, 4) . preg_replace('/\w/', 'x', substr($email, 4));

在MySQL查询中执行它通常不是可以理解的。 MySQL并不擅长这种数据转换。

答案 4 :(得分:0)

涉及php,选择记录和比 将每个电子邮件地址分为两部分

As New