特定のページが表示されたときに電子メールアドレスを検閲して、最初の文字が表示され、@記号は表示されますが、残りは以下の例のように* :指定された文字を除くすべての文字を*に置き換えてください
V ******** @ *********
どのように私はこれを行うに行きますか?私はこれに答えを見つけることができません(あるいは、私はちょうど正しいことをグーグルではない)。
特定のページが表示されたときに電子メールアドレスを検閲して、最初の文字が表示され、@記号は表示されますが、残りは以下の例のように* :指定された文字を除くすべての文字を*に置き換えてください
V ******** @ *********
どのように私はこれを行うに行きますか?私はこれに答えを見つけることができません(あるいは、私はちょうど正しいことをグーグルではない)。
ショートと甘い1つのライナー:
$result = substr($str, 0, 1) . preg_replace('/[^@]/', '*', substr($str, 1));
substr($str, 0, 1)
は、例えば、文字列の最初の文字を取得しますv
。preg_replace('/[^@]/', '*', substr($str, 1))
は、最初の文字以降のすべてを、@
シンボルに置き換えます。eval.inデモ
<?php
$email = "[email protected]";
// Split into name and domain
$pieces = explode("@", $email);
// Add the first letter
$censored = substr($email, 0, 1);
// Add the name stars
for ($i = 1; $i <= strlen($pieces[0]) - 1; $i++) {
$censored = $censored."*";
}
// Add the @ sign
$censored = $censored."@";
// Add the domain stars
for ($i = 1; $i <= strlen($pieces[1]); $i++) {
$censored = $censored."*";
}
echo $censored;
regexとstr_padを使用していますか?
regexを使用して最初の文字をキャプチャし、残りの部分をキャプチャします。
文字列に「*」を追加するには、str_padを使用します。
$mail = "[email protected]";
preg_match("/(.)(.*?)@(.*)/", $mail, $Match);
$str = $Match[1] . str_pad("", strlen($Match[2]), "*"). "@" . str_pad("", strlen($Match[3]), "*");
echo $str;
文字列を再構築するコールバックを使用します。
<?php
$subject = '[email protected]';
$subject = preg_replace_callback('/^(.)(.*)@(.*)$/', function($m) {
return sprintf(
'%s%[email protected]%s',
$m[1],
str_pad('', strlen($m[2]), '*'),
str_pad('', strlen($m[3]), '*')
);
}, $subject);
var_dump($subject);
出力は明らかである:
string(19) "s******@***********"
これは、少し具体的には上のスクリプトを使用する準備ができて見つけるように見えますGoogle。自分でスクリプトを書いたのなら、あなたはどうしますか? – Halcyon
ループメソッド リンクが役立ちますhttps://stackoverflow.com/questions/8163746/how-to-replace-certain-part---my-string –
substr()を使用すると、しかし、私は残りの部分を行う必要がある正規表現を知りません。電子メールアドレスは文字と数字を持つことができますが、見つかった正規表現は@記号が置き換えられるのを妨げません。 – VenomRush