实训项目:PHP正则表达式的应用

简介: 正则表达式是一种描述字符串结构的语法规则,是一种特定的格式化模式,用于验证各种字符串是否匹配(Match)这个特征,进而实现高级的文本查找、替换、截取等操作。正则表达式在发展过程中出现了多种形式,一种是POSIX规范兼容的表达式,另一种是当Perl(一种功能丰富的编程语言)发展起来后,衍生出来的PCRE(Perl兼容正则表达式)库,使得许多开发人员将PCRE整合到自己的语言中,PHP中也未PCRE库的使用提供了相应的函数。

实训要求

新建一个网页,请输入您本人的个人信息留言(同学们在调试程序时请输入您自己的姓名,QQ邮箱等具体信息),为了避免用户泄露个人信息,程序对所输入的留言信息中的所有数字都替换为“***”。数字包括阿拉伯数字及中文数字,以及小数点。当用户单击“提交”按钮后,在网页下部显示出过滤之后的效果,如图所示。

image.png

php代码

<!DOCTYPE html><html><head><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/><style>/* 背景可以不要 *//*body    {        background: url(./fb163613ca66653a9778fffc11e524e.jpg);    }*/.box1    {
position: relative;
width: 31.25rem;
height:25rem;
border: 0.625remdouble#000;
margin: 0auto;
top: 6.25rem;
box-shadow: 0.625rem0.625rem1.25rem0.3125remrgb(49, 49, 49);
    }
h1,p,.box_button    {
text-align: center;
    }
.box_button    {
/* width: 200px;        border: 1px solid; */margin: 0auto;
    }
textarea    {
resize:none;
    }
.box2  {
position: absolute;   
top: 31.25rem;
left: -5.75rem;
width: 42.5rem;
height: 22.75rem;
margin: 0auto;
border: 0.625remdouble#000;
  }
.box2b  {
margin-left: 2.25rem;
  }
.box_bottom  {
position: absolute;
margin: 0auto;
/* top: -10.25rem; */  }
</style></head><body><divclass="box_bottom"style="color:#363636;font-weight: bolder;font-family: Courier New">© <spanstyle="letter-spacing: 1.5px;font-size: 1.6rem;">2022 GHW・WebSite</span></div><divclass="box1"><h1>留言板</h1><formaction=""name="f1"id="f1"method="post"><p>请输你的留言:</p><p><textareaname="t1"id="t1"cols="60"rows="10"></textarea></p><divclass="box_button"><inputtype="submit"name="send"id="send"style="margin-right: 50px;"><inputtype="reset"name="send"id="send"></div></form><divclass="box2"><h1>留言记录...</h1><?php$msg=@$_REQUEST['t1'];  // $reg='/(\d+)/';         //搞定身高、学号// $reg='/\d+(\.\d)?/';    //搞定小数点// $reg='/\d+(\.\d+)?/';    //搞定小数点// $reg='/[\.*]/';         //搞定英文句号.// $reg='/(零|一|二|两|三|四|五|六|七|八|九|十)(百|十|零)?(一|二|两|三|四|五|六|七|八|九)?(百|十|零)?(一|二|两|三|四|五|六|七|八|九)?/';       //搞定中文数字 呵呵...// $reg='/((0|[1-9]\d*)(\.\d+)?)|(一|二|两|三|四|五|六|七|八|九)?(万|千|百|十|零)?/';//然后合体!!!//正则表达式真不想学(弱爆〒▽〒$reg = '/((0|[1-9]\d*)(\.\d+)?)|(\.\d*)|[\.*]|(零|一|二|两|三|四|五|六|七|八|九|十)(百|十|零)?(一|二|两|三|四|五|六|七|八|九)?(百|十|零)?(一|二|两|三|四|五|六|七|八|九)?/';if(isset($_REQUEST['send'])){if($msg==''){echo '<b>'.'请输入留言'.'</b>';}$jm=preg_replace($reg,"***",$msg);echo '<b>'.$jm.'</b>';}?></div></div></body></html>

实现效果

输入留言

image.png

点击提交

image.png

知识点解析

正则表达式:

正则表达式是一种描述字符串结构的语法规则,是一种特定的格式化模式,用于验证各种字符串是否匹配(Match)这个特征,进而实现高级的文本查找、替换、截取等操作。

正则表达式在发展过程中出现了多种形式,一种是POSIX规范兼容的表达式,另一种是当Perl(一种功能丰富的编程语言)发展起来后,衍生出来的PCRE(Perl兼容正则表达式)库,使得许多开发人员将PCRE整合到自己的语言中,PHP中也未PCRE库的使用提供了相应的函数。

(什么是正则表达式?点击正则表达式进行详细学习)

本次实训,要求对所输入的留言信息中的所有数字都替换为“***”。数字包括阿拉伯数字及中文数字,以及小数点。

核心代码为:

$reg = '/((0|[1-9]\d*)(\.\d+)?)|(\.\d*)|[\.*]|(零|一|二|两|三|四|五|六|七|八|九|十)(百|十|零)?(一|二|两|三|四|五|六|七|八|九)?(百|十|零)?(一|二|两|三|四|五|六|七|八|九)?/';

针对正则表达式匹配所有数字,包括中文数字,以及小数点。我们可以分步来实现匹配。

image.png

知识点涉及:

1.选择符

若要查找的条件有多个,只要其中一个满足即可成立时,可以使用选择符“|”。该字符可以理  解为“或”。

2.字符范围

在正则表达式中,对于匹配某个范围内的字符,可以用中括号“[]”和连字符“-”来实现。且在中括号中还可以用反义字符“^,表示匹配不在指定字符范围内的字符。

3.点字符和限定符

字符“.”用于匹配一个任意字符,限定符(?、+、*、{})用于匹配某个字符连续出现的次数。

image.gif编辑

4.括号字符

在正则表达式中,括号字符“()”有两个作用:一是改变限定符的作用范围;二是分组。

(1)改变限定符的作用范围

①改变作用范围前

正则表达式:firm|sh

可匹配的结果:firm、sh

②改变作用范围后

正则表达式:fi(rm|sh)

可匹配的结果:firm、fish

(2)分组

①分组前

正则表达式:bana{2}

可匹配的结果:banaa

②分组后

正则表达式:ba(na){2}

可匹配的结果:banana

5.preg_replace()函数

功能:通过正则表达式完成字符串的搜索和替换

语法:mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )preg_replace()函数首先会搜索第3个参数中符合第1个参数正则规则的内容,然后使用第2个参数进行替换。其中,第3个参数的数据类型决定着返回值的类型。

相关文章
|
Web App开发 安全 PHP
刚上线的PHP项目被攻击了怎么办
近期因忙于多个项目,代码质量有所疏忽,导致项目上线后遭攻击。攻击者通过文件上传漏洞和测试登录方式入侵,修改了 index.php 并植入恶意文件。经排查,问题源于未限制上传文件类型及未关闭测试登录配置。修复措施包括锁定文件、限制上传后缀、关闭测试登录、删除高危用户并限制其访问。此次事件提醒我们,细节疏漏可能引发严重风险,需时刻保持警惕。
|
JavaScript Linux PHP
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
377 3
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
|
12月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
SQL 关系型数据库 数据库连接
PHP脚本中应用while循环按照ID顺序列出数据集的技巧。
代码整体运行流程非常简单高效:连接数据库、发送查询、处理结果、关闭连接。下面的步骤是常规的PHP数据库操作流程,无需复杂处理即可实现按ID顺序列出数据集。确保代码清晰,易于理解,且可执行性强。如果在生产环境中应用这段代码,需要注意处理数据库连接的安全性、查询效率以及异常处理等。
252 16
|
PHP
Composer在PHP项目中的手动类自动加载策略
为了确保文件名和类名的一致性及其可预测性,类名通常应该与文件名相匹配,所有的类都应属于一个命名空间,并且目录结构应该反映命名空间的结构。如此一来,当新的类被创建时,它们会自动遵守已有的约定,从而无需修改自动加载逻辑,确保了代码的模块化和可管理性。
183 8
|
存储 缓存 安全
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
608 2
|
存储 自然语言处理 安全
PHP-Casbin:现代化 PHP 应用的权限管理引擎
PHP-Casbin 是基于 PERM 模型的轻量级权限框架,支持 ACL、RBAC、ABAC 等多种访问控制模型,适用于 API 安全控制、企业权限管理等场景。其灵活配置、多语言协同与分布式支持,使其成为现代化 PHP 应用权限管理的首选工具。
474 0
|
安全 API PHP
Composer在现代PHP项目中的进阶实践
简介:本文深入探讨PHP依赖管理工具Composer的核心功能与企业实践。首先介绍其如何通过`composer.json`实现声明式依赖管理,变革PHP生态;接着解析自动加载优化、版本策略(如`~`和`^`)及私有仓库集成等关键特性;然后分享CI/CD集成、多环境配置与性能优化技巧(如阿里云镜像加速)的企业级方案;最后提供常见问题排查方法,如内存不足和依赖冲突解决,助力开发者高效管理项目依赖。
316 3
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。