Как заменить некоторые символы звездочками

У меня есть простая задача сделать с PHP, но так как я не знаком с регулярным выражением или чем-то еще … Я понятия не имею, что я буду делать.

то, что я хочу, очень просто на самом деле …

скажем, у меня есть эти переменные:

$Email = 'john@example.com'; // output : ****@example.com $Email2 = 'janedoe@example.com'; // output : *******@example.com $Email3 = 'johndoe2012@example.com'; // output : ***********@example.com $Phone = '0821212121'; // output : 082121**** << REPLACE LAST FOUR DIGIT WITH * 

как это сделать с PHP? Благодарю.

Для каждой из них вам понадобится определенная функция. Для писем:

 function hide_mail($email) { $mail_segments = explode("@", $email); $mail_segments[0] = str_repeat("*", strlen($mail_segments[0])); return implode("@", $mail_segments); } echo hide_mail("example@gmail.com"); 

Для телефонов

 function hide_phone($phone) { return substr($phone, 0, -4) . "****"; } echo hide_phone("1234567890"); 

И посмотреть? Не используется одно регулярное выражение. Однако эти функции не проверяют на достоверность. Вам нужно будет определить, что такое строка, и вызвать соответствующую функцию.

Я пытался использовать однорежимное решение, но не думаю, что это возможно из-за звездочек переменной длины. Возможно, что-то вроде этого:

 function anonymiseString($str) { if(is_numeric($str)) { $str = preg_replace('/^(\d*?)\d{4}$/', '$1****'); } elseif(($until = strpos($str, '@')) !== false) { $str = str_repeat('*', $until) . substr($str, $until + 1); } return $str; } 

Для электронной почты эта функция сохраняет первую букву:

 function hideEmail($email) { $parts = explode('@', $email); return substr($parts[0], 0, min(1, strlen($parts[0])-1)) . str_repeat('*', max(1, strlen($parts[0]) - 1)) . '@' . $parts[1]; } hideEmail('hello@domain.com'); // h****@domain.com hideEmail('hi@domain.com'); // h*@domain.com hideEmail('h@domain.com'); // *@domain.com 

Я создаю одну функцию для этого, отлично работает для меня. Я надеюсь на помощь.

 function ofuscaEmail($email, $domain_ = false){ $seg = explode('@', $email); $user = ''; $domain = ''; if (strlen($seg[0]) > 3) { $sub_seg = str_split($seg[0]); $user .= $sub_seg[0].$sub_seg[1]; for ($i=2; $i < count($sub_seg)-1; $i++) { if ($sub_seg[$i] == '.') { $user .= '.'; }else if($sub_seg[$i] == '_'){ $user .= '_'; }else{ $user .= '*'; } } $user .= $sub_seg[count($sub_seg)-1]; }else{ $sub_seg = str_split($seg[0]); $user .= $sub_seg[0]; for ($i=1; $i < count($sub_seg); $i++) { $user .= ($sub_seg[$i] == '.') ? '.' : '*'; } } $sub_seg2 = str_split($seg[1]); $domain .= $sub_seg2[0]; for ($i=1; $i < count($sub_seg2)-2; $i++) { $domain .= ($sub_seg2[$i] == '.') ? '.' : '*'; } $domain .= $sub_seg2[count($sub_seg2)-2].$sub_seg2[count($sub_seg2)-1]; return ($domain_ == false) ? $user.'@'.$seg[1] : $user.'@'.$domain ; }