4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

センシティブな文字列をPHPで伏せ字にするパターン集<随時更新>

Posted at

株式会社オズビジョン@terra_yuccoです。

業務開発で、文字列の一部を伏せる対応が必要になり、
色々なサンプルを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;

参考リンク

まとめ

一部の文字列を伏せたいときにはこんなやり方があるよ、というご紹介でした。

おしまい。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?