Table des matières
PHP将部分内容替换成星号
Maison développement back-end tutoriel php PHP将部分内容替换成星号_PHP教程

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

Jul 13, 2016 am 10:19 AM
内容 partie

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位的需求。当时一开始是网上...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment activer l'avertissement de contenu sensible sur iPhone et en savoir plus sur ses fonctionnalités Comment activer l'avertissement de contenu sensible sur iPhone et en savoir plus sur ses fonctionnalités Sep 22, 2023 pm 12:41 PM

Au cours de la dernière décennie, les appareils mobiles sont devenus le principal moyen de partager du contenu avec vos amis et votre famille. La facilité d'accès, l'interface facile à utiliser et la possibilité de capturer des images et des vidéos en temps réel en font un excellent choix pour créer et partager du contenu. Cependant, il est facile pour des utilisateurs malveillants d'abuser de ces outils pour transférer du contenu indésirable et sensible qui peut ne pas convenir à la visualisation et ne nécessite pas votre consentement. Pour éviter que cela ne se produise, une nouvelle fonctionnalité « Avertissement de contenu sensible » a été introduite dans iOS17. Jetons un coup d'œil et comment l'utiliser sur votre iPhone. Qu'est-ce que le nouvel avertissement relatif au contenu sensible et comment fonctionne-t-il ? Comme mentionné ci-dessus, l'avertissement de contenu sensible est une nouvelle fonctionnalité de confidentialité et de sécurité conçue pour empêcher les utilisateurs de consulter du contenu sensible, y compris l'iPhone.

Comment changer le navigateur Microsoft Edge pour qu'il s'ouvre avec la navigation 360 - Comment changer l'ouverture avec la navigation 360 Comment changer le navigateur Microsoft Edge pour qu'il s'ouvre avec la navigation 360 - Comment changer l'ouverture avec la navigation 360 Mar 04, 2024 pm 01:50 PM

Comment changer la page qui ouvre le navigateur Microsoft Edge en navigation 360 ? C'est en fait très simple, je vais donc maintenant partager avec vous la méthode pour changer la page qui ouvre le navigateur Microsoft Edge en navigation 360. Les amis dans le besoin peuvent prendre une décision. regarde. J'espère pouvoir aider tout le monde. Ouvrez le navigateur Microsoft Edge. Nous voyons une page comme celle ci-dessous. Cliquez sur l'icône à trois points dans le coin supérieur droit. Cliquez sur "Paramètres". Cliquez sur "Au démarrage" dans la colonne de gauche de la page des paramètres. Cliquez sur les trois points affichés dans l'image dans la colonne de droite (ne cliquez pas sur "Ouvrir un nouvel onglet"), puis cliquez sur Modifier et remplacez l'URL par "0" (ou d'autres nombres dénués de sens). Cliquez ensuite sur "Enregistrer". Ensuite, sélectionnez "

Comment configurer Cheat Engine en chinois ? Méthode chinoise de réglage du moteur de triche Comment configurer Cheat Engine en chinois ? Méthode chinoise de réglage du moteur de triche Mar 13, 2024 pm 04:49 PM

CheatEngine est un éditeur de jeu qui peut éditer et modifier la mémoire du jeu. Cependant, sa langue par défaut n'est pas le chinois, ce qui est gênant pour de nombreux amis. Alors, comment définir le chinois dans CheatEngine ? Aujourd'hui, l'éditeur vous donnera une introduction détaillée sur la façon de configurer le chinois dans CheatEngine. J'espère que cela pourra vous aider. Première méthode de paramétrage : 1. Double-cliquez pour ouvrir le logiciel et cliquez sur « modifier » dans le coin supérieur gauche. 2. Cliquez ensuite sur « paramètres » dans la liste d'options ci-dessous. 3. Dans l'interface de la fenêtre ouverte, cliquez sur « langues » dans la colonne de gauche

Où définir le bouton de téléchargement dans Microsoft Edge - Comment définir le bouton de téléchargement dans Microsoft Edge Où définir le bouton de téléchargement dans Microsoft Edge - Comment définir le bouton de téléchargement dans Microsoft Edge Mar 06, 2024 am 11:49 AM

Savez-vous où définir le bouton de téléchargement pour qu'il s'affiche dans Microsoft Edge ? Ci-dessous, l'éditeur vous présentera la méthode pour définir le bouton de téléchargement à afficher dans Microsoft Edge. J'espère que cela vous sera utile. Suivons l'éditeur pour apprendre. à ce sujet ! Étape 1 : Ouvrez d'abord le navigateur Microsoft Edge, cliquez sur le logo [...] dans le coin supérieur droit, comme indiqué dans la figure ci-dessous. Étape 2 : Cliquez ensuite sur [Paramètres] dans le menu contextuel, comme indiqué dans la figure ci-dessous. Étape 3 : Cliquez ensuite sur [Apparence] sur le côté gauche de l'interface, comme indiqué dans la figure ci-dessous. Étape 4 : Enfin, cliquez sur le bouton à droite de [Afficher le bouton de téléchargement] et il passera du gris au bleu, comme le montre la figure ci-dessous. C'est ci-dessus que l'éditeur vous explique comment configurer le bouton de téléchargement dans Microsoft Edge.

Comment peut-on mettre trois parties côte à côte en HTML ? Comment peut-on mettre trois parties côte à côte en HTML ? Sep 04, 2023 pm 11:21 PM

Les balises définissent les divisions d'un document HTML. Cette balise est principalement utilisée pour regrouper des contenus similaires afin de faciliter le style et sert également de conteneur pour les éléments HTML. Nous utilisons les propriétés CSS pour placer trois balises de section côte à côte en HTML. La propriété CSS float est utilisée à cet effet. Syntaxe Vous trouverez ci-dessous la syntaxe de la balise <div>. <divclass='division'>Contenu…</div>La traduction chinoise de l'exemple 1 est : Exemple 1 Ce qui suit est un exemple d'utilisation des propriétés CSS pour placer trois classes de division côte à côte dans HTML. <!DOCTYPEhtml><html><

Le quotidien de l'Ain, voyageur dans l'espace et le temps : mise à jour permanente des contenus Le quotidien de l'Ain, voyageur dans l'espace et le temps : mise à jour permanente des contenus Mar 01, 2024 pm 08:37 PM

La mise à jour de Painted Traveler in Time and Space a été confirmée le 29 février. Les joueurs peuvent se rendre au festival de musique en plein air avec Ain pour obtenir un bonus de faveur avec Ain. L'événement Lingering Holiday Color Time sera lancé le 4 mars. , les joueurs peuvent améliorer le niveau de leur itinéraire de vacances pour débloquer de nouveaux messages texte et du contenu Lofter. Le quotidien de l'Ain, voyageur dans le temps et l'espace : mise à jour permanente des contenus Après la version du 29 février, vous pourrez découvrir le nouveau planning du campus [Participer au Festival de musique en plein air], et vous pourrez obtenir un bonus de faveur en participant avec l'Ain . De 9h30 le 4 mars à 05h00 le 15 avril, pendant l'événement "Longing Holiday·Sexy Time", améliorez le niveau [Holiday Itinerary] au niveau 8 et au niveau 28 pour débloquer respectivement de nouveaux messages texte et du contenu Lofter. *Nouveaux SMS et Lofter ajoutés

Analyse de la disposition DEX de Solana : Jupiter est-il l'avenir de l'écologie ? Analyse de la disposition DEX de Solana : Jupiter est-il l'avenir de l'écologie ? Mar 26, 2024 pm 02:10 PM

Source : Shenchao TechFlow En tant que projet émergent de grande envergure dans l'écosystème Solana, Jupiter a rapidement émergé dans le domaine DeFi malgré son lancement court. Cependant, même dans un environnement en évolution aussi rapide, l’amélioration des modèles économiques et la stabilité des prix symboliques restent cruciales. Sans ces soutiens, un projet peut facilement tomber dans un cercle vicieux qui peut finalement conduire à son déclin, voire à son incapacité à se maintenir. Par conséquent, Jupiter doit optimiser continuellement sa conception économique et assurer la stabilité des prix symboliques pour assurer le développement et le succès à long terme du projet. La chaîne Solana a enregistré de solides performances au cours de la semaine dernière, avec son jeton SOL augmentant rapidement sur le marché secondaire et le jeton $JUP de Jupiter ayant également augmenté au cours des deux dernières semaines.

Qu'est-ce que PQ3, le nouveau protocole de sécurité iMessage d'Apple ? Qu'est-ce que PQ3, le nouveau protocole de sécurité iMessage d'Apple ? Feb 23, 2024 am 08:25 AM

Qu'est-ce que le protocole PQ3 ? Actuellement, la sécurité des communications est mesurée par trois niveaux de sécurité. Niveau 0 : à ce niveau, les messages restent non cryptés. Niveau 1 : ici, les messages sont chiffrés de bout en bout, mais il n'y a pas d'authentification supplémentaire ni de sécurité quantique. Niveau 2 : cela inclut l'authentification et la sécurité quantique, mais ils sont limités à l'établissement initial de la clé. Cela signifie que la sécurité quantique ne peut être assurée que si les éléments clés de la conversation ne peuvent jamais être compromis. Crédit d'image : Le nouveau protocole de sécurité iMessage d'Apple, PQ3, est le premier protocole de messagerie reconnu comme atteignant ce qu'Apple appelle le « niveau de sécurité 3 ». Le protocole utilise la technologie de cryptage quantique pour sécuriser la génération de clés et l'échange de messages. Même si la clé est compromise, le PQC de niveau 3 peut

See all articles