Jadual Kandungan
PHP将部分内容替换成星号
Rumah pembangunan bahagian belakang tutorial php PHP将部分内容替换成星号_PHP教程

PHP将部分内容替换成星号_PHP教程

Jul 13, 2016 am 10:19 AM
kandungan bahagian

PHP将部分内容替换成星号

在最近的项目中,会碰到到某人的手机号码隐藏中间几位,身份证号码只显示末尾4位的需求。当时一开始是网上搜索了一下,看到有人是用substr_replace这个函数来替换的,后面我也用了这个函数,但在用的时候不是很好用。
 
一、substr_replace
 
先来看看这个函数的语法:
 
substr_replace(string,replacement,start,length)
参数 描述
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start
必需。规定在字符串的何处开始替换。
 
  正数 - 在第 start 个偏移量开始替换
 
  负数 - 在从字符串结尾的第 start 个偏移量开始替换
 
  0 - 在字符串中的第一个字符处开始替换
 
charlist
可选。规定要替换多少个字符。
 
  正数 - 被替换的字符串长度
 
  负数 - 从字符串末端开始的被替换字符数
 
  0 - 插入而非替换
 
1、当start与charlist都为正数的时候,非常好理解,也很符号人的逻辑,start是从0开始的,如下图,根据条件,绿色的将是要被替换的元素
 
 
 
2、当start为负数,charlist为正数的时候,也挺好理解的
 
 
 
3、当start为正数,charlist为负数的时候,这个我一开始理解错了
 
 
 
4、当start为负数,charlist为负数的时候,有一个地方需要注意的就是:如果 start 是负数且 length 小于等于 start,则 length 为 0。这个坑挺容易踩到的
 
 
 
5、charlist为0的时候,就变成插入了,而不是替换,额。。。
 
 
 
用下来,我是感觉不是很顺手,虽然说满足我现在的需求还是可以的,但是如果将来需要一些扩展的话,耍起来挺吃力的,所以就想到自己构造一个,将来用起来也方便。
 
 
 
二、自制的星号替换函数
 
replaceStar($str, $start, $length = 0)
参数 描述
str 必需。规定要检查的字符串。
start
必需。规定在字符串的何处开始替换。
 
  正数 - 在第 start 个偏移量开始替换
 
  负数 - 在从字符串结尾的第 start 个偏移量开始替换
 
  0 - 在字符串中的第一个字符处开始替换
 
length
可选。规定要替换多少个字符。
 
  正数 - 被替换的字符串长度,从左往右
 
  负数 - 被替换的字符串长度,从右往左
 
  0 - 如果start为正数,从start开始向左到最后
 
     - 如果start为负数,从start开始向右到最后
 
前面的两个参数与上面的一样,最后的参数与上面不同
 
1、当start与length都为正数,与substr_replace表现的一样
 
2、当start为负数,length为正数,与substr_replace表现的一样
 
 
substr_replace
replaceStar
start为正数,长度为负数
 
 
 
start为负数,长度为负数
 
 
 
 
 start为正数,长度为0 做插入操作
 start为负数,长度为0 做插入操作
三、源码分享
 
复制代码
public static function replaceStar($str, $start, $length = 0)
{
        $i = 0;
        $star = '';
        if($start >= 0) {
            if($length > 0) {
                $str_len = strlen($str);
                $count = $length;
                if($start >= $str_len) {//当开始的下标大于字符串长度的时候,就不做替换了
                    $count = 0;
                }
            }elseif($length
                $str_len = strlen($str);
                $count = abs($length);
                if($start >= $str_len) {//当开始的下标大于字符串长度的时候,由于是反向的,就从最后那个字符的下标开始
                    $start = $str_len - 1;
                }
                $offset = $start - $count + 1;//起点下标减去数量,计算偏移量
                $count = $offset >= 0 ? abs($length) : ($start + 1);//偏移量大于等于0说明没有超过最左边,小于0了说明超过了最左边,就用起点到最左边的长度
                $start = $offset >= 0 ? $offset : 0;//从最左边或左边的某个位置开始
            }else {
                $str_len = strlen($str);
                $count = $str_len - $start;//计算要替换的数量
            }
        }else {
            if($length > 0) {
                $offset = abs($start);
                $count = $offset >= $length ? $length : $offset;//大于等于长度的时候 没有超出最右边
            }elseif($length
                $str_len = strlen($str);
                $end = $str_len + $start;//计算偏移的结尾值
                $offset = abs($start + $length) - 1;//计算偏移量,由于都是负数就加起来
                $start = $str_len - $offset;//计算起点值
                $start = $start >= 0 ? $start : 0;
                $count = $end - $start + 1;
            }else {
                $str_len = strlen($str);
                $count = $str_len + $start + 1;//计算需要偏移的长度
                $start = 0;
            }
        }
 
        while ($i
            $star .= '*';
            $i++;
        }
 
        return substr_replace($str, $star, $start, $count);
}
复制代码
不擅长算法,这里就用很普通的逻辑来展示啦,没有用到啥数学公式。
 
1、if($start >= 0)这里做start大于等于0与小于0的分支
 
2、在start 的分之中,分别再做length 大于0,小于0和等于0的三个分支
 
3、最后计算出start、count和要替换的星号字符串,最后计算出的start与count都是正数,运用substr_replace做替换
 
 
 
四、单元测试
 
复制代码
public function testReplaceStar()
    {
        $actual = App_Util_String::replaceStar('123456789', 3, 2);
        $this->assertEquals($actual, '123**6789');
        
        $actual = App_Util_String::replaceStar('123456789', 9);
        $this->assertEquals($actual, '123456789');
        
        $actual = App_Util_String::replaceStar('123456789', 9, 2);
        $this->assertEquals($actual, '123456789');
        
        $actual = App_Util_String::replaceStar('123456789', 9, -9);
        $this->assertEquals($actual, '*********');
        
        $actual = App_Util_String::replaceStar('123456789', 9, -10);
        $this->assertEquals($actual, '*********');
        
        $actual = App_Util_String::replaceStar('123456789', 9, -11);
        $this->assertEquals($actual, '*********');
        
        $actual = App_Util_String::replaceStar('123456789', 3);
        $this->assertEquals($actual, '123******');
        
        $actual = App_Util_String::replaceStar('123456789', 0);
        $this->assertEquals($actual, '*********');
        
        $actual = App_Util_String::replaceStar('123456789', 0, 2);
        $this->assertEquals($actual, '**3456789');
 
        $actual = App_Util_String::replaceStar('123456789', 3, -3);
        $this->assertEquals($actual, '1***56789');
        
        $actual = App_Util_String::replaceStar('123456789', 1, -5);
        $this->assertEquals($actual, '**3456789');
        
        $actual = App_Util_String::replaceStar('123456789', 3, -3);
        $this->assertEquals($actual, '1***56789');
        
        $actual = App_Util_String::replaceStar('123456789', -3, 2);
        $this->assertEquals($actual, '123456**9');
        
        $actual = App_Util_String::replaceStar('123456789', -3, 5);
        $this->assertEquals($actual, '123456***');
        
        $actual = App_Util_String::replaceStar('123456789', -1, 2);
        $this->assertEquals($actual, '12345678*');
        
        $actual = App_Util_String::replaceStar('123456789', -1, -2);
        $this->assertEquals($actual, '1234567**');
        
        $actual = App_Util_String::replaceStar('123456789', -4, -7);
        $this->assertEquals($actual, '******789');
        
        $actual = App_Util_String::replaceStar('123456789', -1, -3);
        $this->assertEquals($actual, '123456***');
        
        $actual = App_Util_String::replaceStar('123456789', -1);
        $this->assertEquals($actual, '*********');
        
        $actual = App_Util_String::replaceStar('123456789', -2);
        $this->assertEquals($actual, '********9');
        
        $actual = App_Util_String::replaceStar('123456789', -9);
        $this->assertEquals($actual, '*23456789');
        
        $actual = App_Util_String::replaceStar('123456789', -10);
        $this->assertEquals($actual, '123456789');
        
        $actual = App_Util_String::replaceStar('123456789', -10, -2);
        $this->assertEquals($actual, '123456789');
    }

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/871181.htmlTechArticlePHP将部分内容替换成星号 在最近的项目中,会碰到到某人的手机号码隐藏中间几位,身份证号码只显示末尾4位的需求。当时一开始是网上...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara mendayakan Amaran Kandungan Sensitif pada iPhone dan ketahui ciri-cirinya Cara mendayakan Amaran Kandungan Sensitif pada iPhone dan ketahui ciri-cirinya Sep 22, 2023 pm 12:41 PM

Terutamanya sepanjang dekad yang lalu, peranti mudah alih telah menjadi cara utama untuk berkongsi kandungan dengan rakan dan keluarga. Antara muka yang mudah diakses, mudah digunakan dan keupayaan untuk menangkap imej dan video dalam masa nyata menjadikannya pilihan yang bagus untuk mencipta dan berkongsi kandungan. Walau bagaimanapun, adalah mudah bagi pengguna yang berniat jahat untuk menyalahgunakan alatan ini untuk memajukan kandungan sensitif yang tidak diingini yang mungkin tidak sesuai untuk dilihat dan tidak memerlukan persetujuan anda. Untuk mengelakkan perkara ini berlaku, ciri baharu dengan "Amaran Kandungan Sensitif" telah diperkenalkan dalam iOS17. Mari lihat dan cara menggunakannya pada iPhone anda. Apakah Amaran Kandungan Sensitif baharu dan bagaimana ia berfungsi? Seperti yang dinyatakan di atas, Amaran Kandungan Sensitif ialah ciri privasi dan keselamatan baharu yang direka untuk membantu menghalang pengguna daripada melihat kandungan sensitif, termasuk iPhone

Bagaimana untuk menukar pelayar Microsoft Edge untuk dibuka dengan navigasi 360 - Bagaimana untuk menukar pembukaan dengan navigasi 360 Bagaimana untuk menukar pelayar Microsoft Edge untuk dibuka dengan navigasi 360 - Bagaimana untuk menukar pembukaan dengan navigasi 360 Mar 04, 2024 pm 01:50 PM

Bagaimana untuk menukar halaman yang membuka pelayar Microsoft Edge kepada navigasi 360 Ia sebenarnya sangat mudah, jadi sekarang saya akan berkongsi dengan anda kaedah menukar halaman yang membuka pelayar Microsoft Edge kepada 360 navigasi Rakan-rakan yang memerlukan lihat. Saya harap dapat membantu semua orang. Buka penyemak imbas Microsoft Edge. Kami melihat halaman seperti di bawah. Klik pada ikon tiga titik di sudut kanan atas. Klik "Tetapan." Klik "Pada permulaan" dalam lajur kiri halaman tetapan. Klik pada tiga titik yang ditunjukkan dalam gambar di lajur kanan (jangan klik "Buka Tab Baharu"), kemudian klik Edit dan tukar URL kepada "0" (atau nombor lain yang tidak bermakna). Kemudian klik "Simpan". Seterusnya, pilih "

Bagaimana untuk menyediakan Cheat Engine dalam bahasa Cina? Kaedah Cina tetapan Cheat Engine Bagaimana untuk menyediakan Cheat Engine dalam bahasa Cina? Kaedah Cina tetapan Cheat Engine Mar 13, 2024 pm 04:49 PM

CheatEngine ialah editor permainan yang boleh mengedit dan mengubah suai memori permainan. Walau bagaimanapun, bahasa lalainya adalah bukan bahasa Cina, yang menyusahkan ramai rakan Jadi bagaimana untuk menetapkan bahasa Cina dalam CheatEngine? Hari ini, editor akan memberi anda pengenalan terperinci tentang cara menyediakan bahasa Cina dalam CheatEngine saya harap ia dapat membantu anda. Kaedah tetapan satu: 1. Klik dua kali untuk membuka perisian dan klik "edit" di sudut kiri atas. 2. Kemudian klik "tetapan" dalam senarai pilihan di bawah. 3. Dalam tetingkap yang terbuka, klik "bahasa" dalam lajur kiri

Di mana untuk menetapkan butang muat turun dalam Microsoft Edge - Bagaimana untuk menetapkan butang muat turun dalam Microsoft Edge Di mana untuk menetapkan butang muat turun dalam Microsoft Edge - Bagaimana untuk menetapkan butang muat turun dalam Microsoft Edge Mar 06, 2024 am 11:49 AM

Adakah anda tahu di mana Microsoft Edge ditetapkan untuk memaparkan butang muat turun di bawah, editor akan membawakan anda kaedah menetapkan butang muat turun untuk dipaparkan dalam Microsoft Edge Saya harap ia akan membantu anda tentangnya! Langkah 1: Mula-mula buka Pelayar Microsoft Edge, klik logo [...] di sudut kanan atas, seperti yang ditunjukkan dalam rajah di bawah. Langkah 2: Kemudian klik [Settings] dalam menu pop timbul, seperti yang ditunjukkan dalam rajah di bawah. Langkah 3: Kemudian klik [Penampilan] di sebelah kiri antara muka, seperti yang ditunjukkan dalam rajah di bawah. Langkah 4: Akhir sekali, klik butang di sebelah kanan [Tunjukkan Butang Muat Turun] dan ia akan bertukar daripada kelabu kepada biru, seperti yang ditunjukkan dalam rajah di bawah. Di atas ialah tempat editor membawa anda cara menyediakan butang muat turun dalam Microsoft Edge.

Bagaimanakah kita boleh meletakkan tiga bahagian bersebelahan dalam HTML? Bagaimanakah kita boleh meletakkan tiga bahagian bersebelahan dalam HTML? Sep 04, 2023 pm 11:21 PM

Tag mentakrifkan pembahagian dokumen HTML. Teg ini digunakan terutamanya untuk mengumpulkan kandungan yang serupa untuk penggayaan yang mudah, dan juga berfungsi sebagai bekas untuk elemen HTML. Kami menggunakan sifat CSS untuk meletakkan tiga teg bahagian sebelah menyebelah dalam HTML. Apungan sifat CSS digunakan untuk mencapai tujuan ini. Sintaks Di bawah ialah sintaks untuk teg <div>. <divclass='division'>Kandungan…</div>Terjemahan Cina Contoh1 ialah: Contoh 1 Berikut ialah contoh menggunakan sifat CSS untuk meletakkan tiga kelas bahagian sebelah menyebelah dalam HTML. <!DOCTYPEhtml><html><

Kehidupan harian Ain, pengembara dalam masa dan ruang: kemas kini kandungan kekal Kehidupan harian Ain, pengembara dalam masa dan ruang: kemas kini kandungan kekal Mar 01, 2024 pm 08:37 PM

The Painted Traveller in Time and Space telah disahkan dikemas kini pada 29 Februari Pemain boleh pergi ke festival muzik terbuka bersama Ain untuk mendapatkan bonus kelebihan dengan acara The Lingering Holiday Color Time akan dilancarkan pada 4 Mac. , pemain boleh meningkatkan tahap jadual perjalanan percutian mereka untuk membuka kunci mesej teks baharu dan kandungan Lofter. The Daily Life of Ain, Pengembara dalam Masa dan Angkasa: Kemas Kini Kandungan Tetap Selepas versi 29 Februari, anda boleh mengalami jadual kampus baharu [Menyertai Festival Muzik Udara Terbuka], dan anda boleh mendapat bonus kelebihan dengan menyertai Ain . Dari jam 09:30 pada 4 Mac hingga 05:00 pada 15 April, semasa acara "Rindu Cuti·Masa Seksi", tingkatkan tahap [Jadual Percutian] kepada tahap 8 dan tahap 28 untuk membuka kunci mesej teks baharu dan kandungan Lofter masing-masing. *SMS baharu dan Lofter ditambah

Menganalisis susun atur DEX Solana: Adakah Musytari masa depan ekologi? Menganalisis susun atur DEX Solana: Adakah Musytari masa depan ekologi? Mar 26, 2024 pm 02:10 PM

Sumber: Shenchao TechFlow Sebagai projek baru muncul berprofil tinggi dalam ekosistem Solana, Musytari telah muncul dengan cepat dalam bidang DeFi walaupun pelancarannya singkat. Walau bagaimanapun, walaupun dalam persekitaran yang pesat membangun, penambahbaikan model ekonomi dan kestabilan harga token masih penting. Tanpa sokongan ini, projek boleh dengan mudah jatuh ke dalam kitaran ganas yang akhirnya boleh menyebabkan kemerosotan atau bahkan ketidakupayaannya untuk mengekalkan dirinya. Oleh itu, Musytari perlu terus mengoptimumkan reka bentuk ekonominya dan memastikan kestabilan harga token untuk memastikan pembangunan jangka panjang dan kejayaan projek. Rantaian Solana telah menunjukkan prestasi yang kukuh pada minggu lalu, dengan token SOLnya meningkat dengan pantas di pasaran sekunder, dan token Jupiter $JUP juga meningkat dalam dua minggu lalu.

Apakah PQ3, protokol keselamatan iMessage baharu Apple? Apakah PQ3, protokol keselamatan iMessage baharu Apple? Feb 23, 2024 am 08:25 AM

Apakah protokol PQ3? Pada masa ini, keselamatan komunikasi diukur dengan tiga tahap keselamatan. Tahap 0: Dalam tahap ini, mesej kekal tidak disulitkan. Tahap 1: Di sini mesej disulitkan dari hujung ke hujung, tetapi tiada pengesahan tambahan atau keselamatan kuantum. Tahap 2: Ini termasuk pengesahan dan keselamatan kuantum, tetapi ia terhad kepada penubuhan kunci awal. Ini bermakna keselamatan kuantum hanya boleh disediakan jika bahan utama perbualan tidak boleh dikompromi. Kredit Imej: Protokol keselamatan iMessage baharu Apple PQ3 ialah protokol pemesejan pertama yang diperakui untuk mencapai apa yang Apple panggil "Keselamatan Tahap 3." Protokol menggunakan teknologi penyulitan kuantum untuk menjamin penjanaan kunci dan pertukaran mesej. Walaupun kunci dikompromi, Tahap 3 PQC boleh

See all articles