PHP从入门到能用(八 · 下)正则表达式的字符串练习【10大题训练——做完就学会】

上部分:PHP从入门到能用(八 · 上)正则表达式的字符串练习【10大题训练——做完就学会】


@[toc]

常用的几个函数

preg_match 执行匹配正则表达式

preg_replace 执行一个正则表达式搜索和替换,返回值为替换后的字符串

preg_split 通过一个正则表达式分隔字符串

preg_grep 返回匹配模式的数组条目

preg_quote 转义正则表达式字符,返回为转义后的字符串



第一题 【字符串替代】

如果 $str=“轻轻的我走了[逗]正如我轻轻地来[句]我挥一挥衣袖[逗]不带走一片云彩 [句]”,完成下面要求:
1) 将$str 中的“[ ]”分别用“( )”代替;
2) 将$str 中的“[逗]”用“,”代替,“[句]”用“。”代替;

1)解 >>>

<?php
$str = "轻轻的我走了[逗]正如我轻轻地来[句]我挥一挥衣袖[逗]不带走一片云彩 [句]";
$str = preg_replace('/\[/', '(', $str);
echo preg_replace('/\]/', ')', $str);

运行截图
在这里插入图片描述
2)解 >>>

<?php
$str = '轻轻的我走了(逗)正如我轻轻地来(句)我挥一挥衣袖(逗)不带走一片云彩 (句)';
$str = preg_replace('/(逗)/', ',', $str);
echo preg_replace('/(句)/','。',$str);

运行截图
在这里插入图片描述



第二题 【字符串单词第一个字母全部大写】

$str=“See What information we have on the PHP coding.cn and sharing your knowledge”
要求:
1) 将此字符串的每个单词开头的字母改写成大写;
2)以空格为分界点,将其转化为数组;然后将此数组再转化为字符串,格式为“ See-What-information-we-have-on-the-PHP-coding-cn-and-sharing-your-know ledge”;

1)解 >>>

<?php
$str = "See What information we have on the PHP coding.cn and sharing your knowledge";
$str =ucwords($str);
echo $str;

运行截图
在这里插入图片描述
2)解 >>>

<?php
$str = "See What information we have on the PHP coding.cn and sharing your knowledge";
$str=explode(' ',$str);
echo implode('-',$str);

运行截图
在这里插入图片描述



第三题 【根据学号判断专业】

创建一网页,在网页上可以显示 5 个文本框,其中每个文本框的宽度为 10 个字符,最多可输入的字符个数也为 10,当点击提交按钮后,可以显示所有学生的学号(注意:每个学生的学号之间以“,”分割,且如果输入相同的学号只显示 1 遍),然后找到 10 级计算机信息管理管理专业的学生(前缀为 1082030),将其前缀改为“10 信管”,并将他们的学号输出。

在这里插入图片描述
解 >>>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        input{
            float:left;
            width:100px
        }

        span{
            display:block;
            float:left;
        }

        .text{
            width:fit-content;
        }
    </style>
</head>
<body>
<form action="" method="get">
    <h4>请输入学号</h4>
    <input type="number" oninput="if(value.length>10)value=value.slice(0,10)" name='k[0]'><span>-</span>
    <input type="number" oninput="if(value.length>10)value=value.slice(0,10)" name='k[1]'><span>-</span>
    <input type="number" oninput="if(value.length>10)value=value.slice(0,10)" name='k[2]'><span>-</span>
    <input type="number" oninput="if(value.length>10)value=value.slice(0,10)" name='k[3]'><span>-</span>
    <input type="number" oninput="if(value.length>10)value=value.slice(0,10)" name='k[4]'><span>-</span>
    <button type="submit">提交</button>
    </form>
    <br>
    <div class='text'>
    </div>

<?php
$kok = $_GET['k'];
$str = '';
$arr = [];
$i = 0;
echo "<p>所有的学生学号如下:</p>";
$str = implode(',', $kok);
echo "<p>$str</p>";

foreach ($kok as $k => $val) {
    if (substr($val, 2, 2) == 82) {
        $arr[$i] = "10信管" . substr($val, 7, 3);
        $i++;
    }
}
$arr = implode(',', $arr);

echo "<p>10级计算机信息管理专业的同学有:</p>";
echo "<p>$arr</p>";
?>
</body>
</html>



第四题 【正则匹配指定单词】

使用正则表达式函数 preg_match (),编写代码,判断字符串“oh,my love”里是否含 有“love”如果是,则输出“匹配成功”,否则,输出“匹配失败”。

<?php
$str = 'oh,my love';
if(preg_match('/love/',$str)){
    echo "匹配成功";
}else{
    echo "匹配失败";
}

在这里插入图片描述



第五题 【匹配特殊身份证号码】

使用正则表达式函数 preg_match (),编写代码,验证 18 位身份证,要求第一位不能为0,从第 7 位到 14 位为出生日期,最后一位为数字、X 或 Y。

<?php
$str = '51010419900307397X';
echo "需要匹配的身份证号为: ".$str."<br/>";
if (preg_match('/^([1-9]{1})([0-9]{5})([1-9]{1}[0-9]{3})([0-1]+[0-9]+)([0-3]+[0-9]+)[\d|Xx|Yy]$/', $str)) {
    echo "匹配成功";
} else {
    echo "匹配失败";
}

在这里插入图片描述
在这里插入图片描述



第六题 【匹配指定单词出现的次数】

使用正则表达式函数 preg_match_all();编写代码,实现此功能:查找字符串“PHP is a language,PHP is a web language,PHP”中 PHP 出现的次数,并以数组的形式输出。如果不存在,则输出”PHP was not found”。

<?php
$str = 'PHP is a language,PHP is a web language,PHP';
preg_match_all('/PHP/', $str, $res);
if (count($res[0])<=0) {
    echo "PHP was not found";
} else {
    print_r($res);
}

在这里插入图片描述



第七题 【匹配指定单词出现的次数】

使用正则表达式函数 preg_replace();编写代码,实现此功能:将字符串”The quick brown fox jumped over the lazy dog” 中 的 ” quick”,”brown”,”fox” 分 别 替 换 为 ” bear”,”black”,”slow”,并输出。

<?php
$str = 'The quick brown fox jumped over the lazy dog';
$str = preg_replace('/quick/', 'bear', $str);
$str = preg_replace('/brown/', 'black', $str);
echo preg_replace('/fox/', 'slow', $str);

在这里插入图片描述



第八题 【字符串切割】

<?php
$str='PHP is a web language';
print_r(preg_split('/\s/',$str));

在这里插入图片描述



第九题 【表单验证】

制作一注册页面如图所示,然后验证表单数据的正确性,每一项数据的验证要求如图所示,如果不符合要求分别给出提示,完全符合要求后可以成功注册。

在这里插入图片描述
z8-9a.php 文件代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        table{
            margin:50px auto;
            text-align:left;
        }

        table tr{
            height:24px;
        }

        table th{
            text-align:center;
            height:28px;
        }
        input{
            line-height:24px;
            border:1px solid red;
        }

        button{
            float:left;
            cursor:pointer;
            border:1px solid blue;
        }
    </style>
</head>
<body>
    <form action="./z8-9b.php" method="post">
    <table border='1'>
        <tr><th colspan="3">用户注册</th></tr>
        <tr><td>用户名:</td><td><input name="name"/></td><td>* 6~12个字符(数字,字母和下划线)</td></tr>
        <tr><td>密码:</td><td><input name="passwd1"/></td><td>* 6~16个数字</td></tr>
        <tr><td>确认密码:</td><td><input name="passwd2"/></td><td>* 必须和密码一致</td></tr>
        <tr><td>出生日期:</td><td><input name="date"/></td><td>* 有效的日期,格式为 “1998-09-10” 样式</td></tr>
        <tr><td>手机:</td><td><input name="phone"/></td><td>* 11位数字,第一位为1</td></tr>
        <tr><td>邮箱:</td><td><input name="inbox"/></td><td>* 有效的邮件地址</td></tr>
        <tr><td colspan="2" style="border:none;"><button type="submit" style="float:right">注册</button></td><td style="border:none;text-align:center;"><button type="submit" style="margin-left:44px;">取消</button></td></tr>
    </table>
</form>
</body>
</html>

z8-9b.php 文件代码

<?php
$name = $_POST['name'];
$passwd1 = $_POST['passwd1'];
$passwd2 = $_POST['passwd2'];
$date = $_POST['date'];
$phone = $_POST['phone'];
$inbox = $_POST['inbox'];
//计数值
$count=0;
// 6~12个字符(数字,字母和下划线)
if(!preg_match('/^[0-9a-zA-Z_]{6,12}$/',$name)){
    echo "用户名格式错误,请输入 6~12个字符(数字,字母和下划线)的用户名<br/>";
    $count++;
}
// 6~16个数字
if(!preg_match('/^\d{6,16}$/',$passwd1)){
    echo "密码错误,密码不足6-16位数或者密码不是数字<br/>";
    $count++;
}else if($passwd1!=$passwd2){
    echo "密码不一致";
    $count++;
}
// 有效的日期,格式为 “1998-09-10” 样式
if(!preg_match('/^[0-9]{4}\-[0-9]{2}\-([0-9]{2})$/',$date)){
    echo "请输入有效的日期,格式为 “1998-09-10” 样式<br/>";
    $count++;
}
// 11位数字,第一位为1
if(!preg_match('/^1[3456789]\d{9}$/',$phone)){
    echo "请输入11位数字,第一位为1<br/>";
    $count++;
}
// 有效的邮件地址
if(!preg_match('/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/',$inbox)){
    echo "请输入有效的邮件地址<br/>";
    $count++;
}

if($count==0){
    echo "<script>alert('恭喜您,注册成功!');</script>";
}


?>
?>

输入正确的时候 >>>
在这里插入图片描述
输入错误的时候 >>>
在这里插入图片描述



第十题 【判断登录时间后问好】

创建一登陆页面如图所示,然后在动态页面中进行如下操作:判断你目前的登陆时间, 当你登录的时间为 6:00-12:00 则显示“XXX,上午好!”,12:00-13:00 显示“XXX,中 午好!”,13:00-18:00 显示“XXX,下午好!”,18:00-22:00 显示“XXX,晚上好!”,22: 00-24:00 显示“XXX,深夜好!”,24:00-6:00 显示“XXX,凌晨好!”

在这里插入图片描述

z8-10a.php代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="./z8-10b.php">
        用户名:<input type="text" name="username" id=""><br/><br/>
        密  码:<input type="passwd" name="userpwd" id=""><br/><br/>
        <button type="submit">提交</button>
        <button type="reset">重置</button>
    </form>
</body>
</html>
<?php

z8-10b.php代码

<?php
$username = $_POST['username'];
$userpwd = $_POST['userpwd'];
echo "<font style='color:red'>$username</font>";
//设置时区的方法;

date_default_timezone_set('prc');

//这样便能获取准确的时间了;
$valDate = date('H:i', time());
$judgeDate = (int) explode(":", $valDate)[0];
if ($judgeDate >= 6 && $judgeDate < 12) {
    echo ",上午好!";
} else if ($judgeDate >= 12 && $judgeDate < 13) {
    echo ",中午好!";
} else if ($judgeDate >= 13 && $judgeDate < 18) {
    echo ",晚上好!";
} else if ($judgeDate >= 18 && $judgeDate < 24) {
    echo ",深夜好!";
} else {
    echo ",凌晨好!";
}

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值