Soy nuevo en expresiones regulares y estoy tratando de sustituir algunos caracteres por asterisco en php como se muestra a continuación:
correo electrónico: victor@gmail.com -> v****r@g***l.com
He hecho esto:
$email = preg_replace('/(?:^|@).\K|\.[^@]*$(*SKIP)(*F)|.(?=.*?\.)/', '*', $linha['cli_email']); El problema es que la salida es v*****@g****.com en lugar de v****r@g***l.com y no sé cómo mostrar el último para el nombre de usuario y último para el proveedor de correo electrónico.
Puedes probar esto:
$email = preg_replace('/(?:^|.@).\K|.\.[^@]*$(*SKIP)(*F)|.(?=.*?\.)/', '*', $linha['cli_email']);Espero haber ayudado..
Aquí, en primer lugar, estamos haciendo coincidir la cadena usando expresiones regulares.
Regex: (?<=\b[az])[a-zA-Z0-9]+(?=.\@)|(?<=@.)[a-zA-Z0-9]+(?=.\.)
(?<=\b[az])[a-zA-Z0-9]+(?=.\@)dice que los caracteres de coincidencia son positivos mirando hacia adelante paraone charactery@y positivos mirando hacia atrás paraboundary conditionya character.
(?<=@.)[a-zA-Z0-9]+(?=.\.)dice que los caracteres de coincidencia son positivos mirando hacia adelante paraone charactery.y positivo mirando hacia atrás para la condición@y un carácter.
Pruebe este fragmento de código aquí
<?php ini_set('display_errors', 1); $email="victor@gmail.com"; preg_match_all('/(?<=\b[az])[az]+(?=.\@)|(?<=@.)[az]+(?=.\.)/',$email,$matches); foreach($matches[0] as $key => $value) { $email=str_replace($value, getStars(strlen($value)), $email); } echo $email; function getStars($length) { $string=""; for($x=0;$x<$length;$x++) { $string.="*"; } return $string; }Debe tener en cuenta todos los tipos de direcciones de correo electrónico. ¿Cómo manejará la respuesta aceptada las direcciones de correo electrónico como m@example.com o user@host.example.com o joe@m.com ?
<?php function starmid($str) { switch (strlen($str)) { case 0: return false; case 1: return $str; case 2: return $str[0] . "*"; default: return $str[0] . str_repeat("*", strlen($str) - 2) . substr($str, -1); } } function hideemail($email) { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { return false; } list($u, $d) = explode("@", $email); $d = explode(".", $d); $tld = array_pop($d); $d = implode(".", $d); return starmid($u) . "@" . starmid($d) . ".$tld"; } $emails = [ "victor@gmail.com", "v@example.com", "victor@g.com", "victor@host.example.com", "victor+foo@gmail.com", "invalid@", ]; foreach ($emails as $email) { echo hideemail($email) . "\n"; }