广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP如何实现局部替换
  • 751
分享到

PHP如何实现局部替换

2023-06-14 23:06:04 751人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关PHP如何实现局部替换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampS

这篇文章给大家分享的是有关PHP如何实现局部替换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

php开发环境搭建工具有哪些

一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampServer也同样的也是和phpStudy一样操作简单对小白比较友好。三、XAMPP,XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包;四、MAMP,MAMP分为两种MAMP和MAMP Pro for Mac。五、宝塔面板,宝塔面板是一款服务器管理软件,支持windowslinux系统。六、UPUPW,UPUPW是目前Windows平台下最具特色的WEB服务器PHP套件。

PHP实现局部替换的方法:1、通过“substr_replace”函数实现局部替换;2、通过自制的星号替换函数“replaceStar($str, $start, $length=0)”实现局部替换。

本文操作环境:windows7系统、PHP7.1版,DELL G3电脑

PHP实现局部替换、利用PHP将部分内容用星号替换

在最近的项目中,会碰到到某人的手机号码隐藏中间几位,身份证号码只显示末尾4位的需求。当时一开始是网上搜索了一下,看到有人是用substr_replace这个函数来替换的,后面我也用了这个函数,但在用的时候不是很好用。

一、substr_replace

先来看看这个函数的语法:

代码如下:

substr_replace(string,replacement,start,length)
参数描述
string必需。规定要检查的字符串
replacement必需。规定要插入的字符串。
start

必需。规定在字符串的何处开始替换。

 正数 - 在第 start 个偏移量开始替换

 负数 - 在从字符串结尾的第 start 个偏移量开始替换

 0 - 在字符串中的第一个字符处开始替换

charlist

可选。规定要替换多少个字符。

  正数 - 被替换的字符串长度

  负数 - 从字符串末端开始的被替换字符数

  0 - 插入而非替换

  • 当start与charlist都为正数的时候,非常好理解,也很符号人的逻辑,start是从0开始的,如下图,根据条件,绿色的将是要被替换的元素

PHP如何实现局部替换

  • 当start为负数,charlist为正数的时候,也挺好理解的

PHP如何实现局部替换

  • 当start为正数,charlist为负数的时候,这个我一开始理解错了

PHP如何实现局部替换

  • 当start为负数,charlist为负数的时候,有一个地方需要注意的就是:如果 start 是负数且 length 小于等于 start,则 length 为 0。这个坑挺容易踩到的

PHP如何实现局部替换

  • charlist为0的时候,就变成插入了,而不是替换,额。。。

用下来,我是感觉不是很顺手,虽然说满足我现在的需求还是可以的,但是如果将来需要一些扩展的话,耍起来挺吃力的,所以就想到自己构造一个,将来用起来也方便。

二、自制的星号替换函数

代码如下:

replaceStar($str, $start, $length = 0)

PHP如何实现局部替换

前面的两个参数与上面的一样,最后的参数与上面不同

  • 当start与length都为正数,与substr_replace表现的一样

  • 当start为负数,length为正数,与substr_replace表现的一样

PHP如何实现局部替换

源码分享

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 < 0){  $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 < 0){  $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 < $count) {  $star .= '*';  $i++; } return substr_replace($str, $star, $start, $count);}

不擅长算法,这里就用很普通的逻辑来展示啦,没有用到啥数学公式。

  • if($start >= 0)这里做start大于等于0与小于0的分支

  • 在start 的分之中,分别再做length 大于0,小于0和等于0的三个分支

  • 最后计算出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'); }

感谢各位的阅读!关于“PHP如何实现局部替换”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: PHP如何实现局部替换

本文链接: https://www.lsjlt.com/news/275927.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP如何实现局部替换
    这篇文章给大家分享的是有关PHP如何实现局部替换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampS...
    99+
    2023-06-14
  • JavaScript如何实现全部替换
    这篇文章将为大家详细讲解有关JavaScript如何实现全部替换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。全部替换我们知道 string.replace() 函数仅替换第一次出现的情况。你可以通过在正...
    99+
    2023-06-27
  • php如何替换部分内容
    这篇“php如何替换部分内容”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何替换部分内容”文章吧。php替换部分内容...
    99+
    2023-07-04
  • php中sprintf如何实现替换
    小编给大家分享一下php中sprintf如何实现替换,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php sprintf实现替换的方法:1、创建一个PHP示例文件...
    99+
    2023-06-22
  • php如何实现替换位置
    这篇“php如何实现替换位置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现替换位置”文章吧。php实现替换位置...
    99+
    2023-07-04
  • php正则替换如何实现
    本篇内容介绍了“php正则替换如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php正则替换的实现方法:1、创建一个php示例文件;2...
    99+
    2023-07-04
  • jQuery如何实现字符串全部替换
    这篇文章主要为大家展示了“jQuery如何实现字符串全部替换”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery如何实现字符串全部替换”这篇文章吧。大家都...
    99+
    2022-10-19
  • JavaScript如何实现文本目标字符替换和一键全部替换
    这篇文章主要介绍“JavaScript如何实现文本目标字符替换和一键全部替换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript如何实现文本目标字符替换和一键全部替换”文章能帮助大家解...
    99+
    2023-07-01
  • php正则如何实现替换alt
    本篇内容主要讲解“php正则如何实现替换alt”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php正则如何实现替换alt”吧!php正则实现替换alt的方法:1、创建一个PHP示例文件;2、获取...
    99+
    2023-06-25
  • mysql如何实现替换字段部分内容
    这篇文章将为大家详细讲解有关mysql如何实现替换字段部分内容,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。[mysql]replace的用法1.replace...
    99+
    2022-10-18
  • php正则如何实现替换电话
    本篇内容介绍了“php正则如何实现替换电话”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php正则实现替换电话的方法:1、创建一个PHP示例...
    99+
    2023-06-22
  • php如何实现正则替换内容
    这篇文章主要为大家展示了php如何实现正则替换内容,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“php如何实现正则替换内容”这篇文章吧。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处...
    99+
    2023-06-06
  • JavaScript实现文本目标字符替换和一键全部替换
    需求描述: 实现在文本中替换目标字符,以及一键全部替换功能。 技术点: 利用string的replace实现替换第一个找到的目标字符。 replace(searchValue: st...
    99+
    2022-11-13
  • php sprintf 怎么实现替换
    本文操作环境:Windows7系统,PHP7.1版,Dell G3电脑。php sprintf 怎么实现替换?sprintf() 函数把格式化的字符串写入变量中。arg1、arg2、++ 参数将被插入到主字符串中的百分号(%)符号处。该函数...
    99+
    2021-10-19
    php sprintf
  • MySQL全局遍历替换特征字符串如何实现
    这篇“MySQL全局遍历替换特征字符串如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL全局遍历替换特征字符串...
    99+
    2023-07-05
  • php如何实现上传文件并替换
    这篇“php如何实现上传文件并替换”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“php如何实现上传文件并替换”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入...
    99+
    2023-06-06
  • php如何替换函数并替换一次
    本篇内容介绍了“php如何替换函数并替换一次”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PHP中的替换字符串函数一般包括str_repla...
    99+
    2023-07-05
  • javascript如何使replace替换全部
    本文将为大家详细介绍“javascript如何使replace替换全部”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“javascript如何使r...
    99+
    2022-10-19
  • php如何替换mcrypt
    这篇文章主要介绍了php如何替换mcrypt的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何替换mcrypt文章都会有所收获,下面我们一起来看看吧。php替换mcrypt的方法:1、打开相应的php文件...
    99+
    2023-07-04
  • php正则表达式如何替换指定部分
    这篇文章主要讲解了“php正则表达式如何替换指定部分”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php正则表达式如何替换指定部分”吧!一、PHP正则表达式概述正则表达式是一种用于描述字符串...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作