PHP基础教程(80)PHP正则表达式之应用正则表达式对用户注册信息进行验证:哈哈哈,你还在为注册页面的“奇葩”输入头疼吗?拯救你的代码,从正则开始!

第一章:当用户输入变成“开盲盒”——你的注册页面安全吗?

嘿,程序员朋友,你有没有经历过这种崩溃时刻?

深夜,你刚写完一个漂亮的用户注册页面,美滋滋地测试了一下——“admin”注册成功,“123456”密码通过,“not-an-email”居然被识别为邮箱!更绝的是,有位“天才用户”在用户名里输入了一串神秘代码:<script>alert('哈哈')</script>,然后你的页面就开始“跳舞”了。

别问我怎么知道的,都是泪啊!

这就是为什么我们需要正则表达式——它不是魔法,但比魔法更实用。想象一下,你是一位海关官员,用户输入的信息就像过境的旅客。没有正则的时候,你只能凭肉眼判断:“嗯,这个人长得像邮箱……大概吧?”有了正则之后,你手里就有了一份精确的护照验证机器,合不合格,一秒见分晓!

第二章:正则表达式——程序员手中的“格式照妖镜”

2.1 正则到底是什么鬼?

简单说,正则表达式就是一串描述文本规则的字符。比如:

  • 想验证邮箱?规则是“必须有@,@前面有字符,后面有点,点后面还有字符”
  • 想验证手机号?规则是“1开头,第二位是3-9,后面跟着9位数字”

把这些规则用特定语法写出来,就是正则表达式。在PHP里,正则就像你的超能格式检测仪,专门对付那些不按套路出牌的输入。

2.2 PHP中的两大“正则门派”

PHP有两种正则函数,别晕,我帮你理清楚:

门派一:PCRE函数(推荐!)

preg_match('/正则模式/', $要检查的字符串);

特点:功能强大,语法清晰,像个稳重的大哥。我们主要用这个。

门派二:POSIX函数(已过时)

ereg('正则模式', $要检查的字符串);

特点:PHP 5.3后就退休了,现在还在用它的话……嗯,该更新知识库啦!

第三章:手把手教你正则“黑话”(其实超简单!)

3.1 先认识几个“核心成员”
// 1. 普通字符——就找它自己
preg_match('/hello/', 'hello world'); // 找到!返回1

// 2. 元字符——有特殊技能的字符
.    // 匹配任意单个字符(除了换行)
\d   // 匹配数字,相当于[0-9]
\w   // 匹配字母、数字、下划线
\s   // 匹配空白(空格、制表符等)
^    // 匹配字符串开头
$    // 匹配字符串结尾

// 3. 量词——控制出现次数
*     // 出现0次或多次
+     // 出现1次或多次
?     // 出现0次或1次
{n}   // 恰好出现n次
{n,}  // 至少出现n次
{n,m} // 出现n到m次

// 4. 字符组——多选一
[abc]     // 匹配a或b或c
[a-z]     // 匹配任意小写字母
[0-9A-Z]  // 匹配数字或大写字母
[^abc]    // 匹配除了a、b、c之外的字符
3.2 举个栗子,一看就懂
// 情况1:用户想注册为“user123”,行不行?
$pattern = '/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/';
// 翻译成人话:
// ^        开头
// [a-zA-Z] 第一个字符必须是字母
// [a-zA-Z0-9_] 后面可以是字母、数字、下划线
// {3,15}   长度总共4-16位(第一个字符+后面3-15个)
// $        结束

echo preg_match($pattern, 'user123'); // 1,通过!
echo preg_match($pattern, '123user'); // 0,失败,数字开头不行
echo preg_match($pattern, 'ab');      // 0,失败,太短了

第四章:实战!用正则武装你的注册页面

4.1 需求分析:到底要验证啥?

一个合格的注册页面,至少要验证:

  1. 用户名:3-20位,字母开头,允许字母数字下划线
  2. 密码:8-20位,必须包含大小写字母和数字
  3. 邮箱:符合标准邮箱格式
  4. 手机号:中国大陆11位手机号
4.2 逐个击破:编写验证正则

用户名验证:防捣蛋小能手

function validateUsername($username) {
    $pattern = '/^[a-zA-Z][a-zA-Z0-9_]{2,19}$/';
    // 解释:字母开头,总长3-20,允许字母数字下划线
    // 为什么{2,19}?因为第一个字符已经占了一位!
    
    if (!preg_match($pattern, $username)) {
        return "用户名格式不对!要求:字母开头,3-20位,可含字母、数字、下划线";
    }
    return true;
}

密码验证:安全感满满

function validatePassword($password) {
    // 方案1:复杂但精准的写法
    $pattern = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d!@#$%^&*]{8,20}$/';
    // 翻译一下这个“天书”:
    // (?=.*[a-z])  必须包含至少一个小写字母
    // (?=.*[A-Z])  必须包含至少一个大写字母  
    // (?=.*\d)     必须包含至少一个数字
    // [a-zA-Z\d!@#$%^&*] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值