業務開発で、文字列の一部を伏せる対応が必要になり、
色々なサンプルをggってみたので、
個人的な備忘も兼ねてまとめておこうと思います。
特に、最後の「3文字置きに伏せる」は、
検索した範囲ではなかなかうまくヒットしなかったので、
自分たちで書いたサンプルを載せていますが、
もっと良い処理があればぜひコメントでお寄せ下さい。
文字列が1バイト文字のみ
echo str_repeat('*', strlen($str));
文字列がマルチバイトを含む
echo str_repeat('*', mb_strlen($str, 'UTF8'));
前5文字以外を伏せ字にする
// abcdefghijklmno >> abcde**********
echo mb_substr($str, 0, 5, 'UTF8') . str_repeat('*', mb_strlen($str, 'UTF8') - 5);
後5文字以外を伏せ字にする
// 1234567890abcde >> **********abcde
echo str_repeat('*', mb_strlen($str, 'UTF8') - 5) . mb_substr($str, -5, 'UTF8');
前5文字を伏せ字にする
// 12345abcdefghij >> *****abcdefghij
echo str_repeat('*', 5) . mb_substr($str, 5, mb_strlen($str, 'UTF8'), 'UTF8');
後5文字を伏せ字にする
// abcdefghijklmno >> abcdefghij*****
echo mb_substr($str, 0, mb_strlen($str, 'UTF8') - 5, 'UTF8') . str_repeat('*', 5);
数字のみ伏せ字にする
// a1b23cde45f6ghi >> a*b**cde**f*ghi
echo preg_replace('/[0-9]{1}/', '*', $str);
3文字置きに伏せる
// abcdefghijklmno >> *bc*ef*hi*kl*no
$hide_str = $str;
for ($pos = 0, $i = 0; $i < strlen($str) / 3; $i++) {
$hide_str = substr_replace($hide_str, '*', $pos, 1);
$pos += 3;
}
echo $hide_str;
参考リンク
-
文字を伏せ字に置換
- 3文字置きに伏せる 以外はこちらからいただきました。
まとめ
一部の文字列を伏せたいときにはこんなやり方があるよ、というご紹介でした。
おしまい。