Замена определенных символов в адресах электронной почты на «*» в запросе SQL - PullRequest
3 голосов
/ 07 февраля 2012

Я пытаюсь реализовать аналогичную функцию на своем веб-сайте и хотел отобразить электронную почту, как показано ниже.

enter image description here

Ниже приведен код MYSQL, который я написал, и он работает нормально длясценарии, которые я проверял.Но я хотел уточнить у вас, ребята, есть ли у нас лучшее решение для этого.

SELECT CONCAT(RPAD(CONCAT(RPAD(firstletter, firstpartlength - 2, '*'),
                   beforedomain), (
                            secondpartlength - Length(afterdot) +
                            firstpartlength ),
                     '*'), afterdot) hiddenemail
FROM   (SELECT SUBSTRING(email, 1, 1)                             firstletter,
               SUBSTRING(email, INSTR(email, '@') - 1, 3)         beforedomain,
               SUBSTR(SUBSTRING(email, INSTR(email, '@')),
               INSTR(SUBSTRING(email,
                     INSTR(email, '@')), '.'))
                      afterdot,
               LENGTH(SUBSTRING(email, 1, INSTR(email, '@') - 1))
               firstpartlength,
               LENGTH(SUBSTRING(email, INSTR(email, '@') + 1))
               secondpartlength
        FROM   test_table) a 

Спасибо за вашу помощь

С уважением, Киран

Ответы [ 2 ]

2 голосов
/ 10 июня 2016

Более простое решение без множественного выбора:

SELECT
CONCAT(
    SUBSTR(`email`,1,1),
    REPEAT('*',LOCATE('@',`email`)-3),
    SUBSTR(`email`,LOCATE('@',`email`)-1,3),
    REPEAT('*',LENGTH(`email`)-LOCATE('.',REVERSE(`email`))-LOCATE('@',`email`)-1),
    SUBSTR(`email`,LENGTH(`email`)-LOCATE('.',REVERSE(`email`)))
) 
FROM `accounts`;
1 голос
/ 07 февраля 2012

Как указано в моем комментарии, я бы порекомендовал решение на основе PHP, например:

<?php
$email = 'youremail@ddre.ss';

$beforeAt=explode("@",$email);
$beforeAt=$beforeAt[0];
$asterisks=str_repeat("*",strlen($beforeAt)-2);
$beforeAt=$beforeAt{0}.$asterisks.substr($beforeAt,-1);
$domain=explode("@",$email);
$domain=explode(".",$domain[1]);
$extension=$domain[count($domain)-1];
$domain=implode(".",$domain);
$domain=substr($domain,0,-1*strlen($extension)-1);
$asterisks=str_repeat("*",strlen($domain)-1);
$email=$beforeAt."@".substr($domain,0,1).$asterisks.".".$extension;

echo $email;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...