PHP第十五课:正则表达式
正则表达式
正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。
在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。
PHP中,正则表达式有三个作用:
匹配,也常常用于从字符串中析取信息。
用新文本代替匹配文本。
将一个字符串拆分为一组更小的信息块。
$username = $_POST['username'];//获得提交来的用户名
$preg = '/^[a-z][a-z0-9]{0,20}$/'; //设置正则规则
$r= preg_match($preg,$username);//用正则函数,使用规则验证:用户名
echo $r; //返回0或1
if($r == 0){echo '用户名不合法';}
else {echo '用户名合法';}
/ /为定界符:定义正则的边界
’^’ 和 ‘$’ 他们是分别用来匹配字符串的开始和结束
字符 '*', '+',和 '?',
*前面的原子匹配0次或多次{0,}
+前面的原子匹配一次或多次{1,}
?前面的原子匹配0次或者1次{0,1}
"ab*": 匹配字符串a和0个或者更多b组成的字符串("a", "ab", "abbb")
"ab+": 和上面一样,但最少有一个b ("ab", "abbb")
"ab?":匹配0个或者一个b
"a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串
.{}表示的含义
"ab{2}": 匹配一个a后面跟两个b(一个也不能少)("abb");
"ab{2,}": 最少有两个b("abb", "abbbb", etc.);
"ab{3,5}": 3-5个b("abbb", "abbbb", or "abbbbb").
"a(bc)*": 匹配 a 后面跟0个或者一个"bc";
"a(bc){1,5}": 一个到5个 "bc."
字符 '│', 相当于OR 操作
"hi│hello": 匹配含有"hi" 或者 "hello" 的 字符串;
"(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字符串;
"(a│b)*c": 匹配含有这样 - 多个(包括0个)a或b,后面跟一个c的字符串 的字符串;
[ ]表示的含义
"[ab]": 匹配单个的 a 或者 b ( 和 "a│b" 一样);
"[a-d]": 匹配'a' 到'd'的单个字符 (和"a│b│c│d" 还有 "[abcd]"效果一样);
“^[a-zA-Z]”: 匹配以字母开头的字符串
“[0-9]%”: 匹配含有 形如 x% 的字符串
",[a-zA-Z0-9]$": 匹配以逗号在加一个数字或字母结尾的字符串
\:反斜杠,是转义符号。紧接的字符将产生别的意思
\d 表示所有数字,相当于[0-9]
\D 表示非数字,相当于[^0-9]
\w 表示字,相当于[a-zA-Z0-9_]
\W 表示非字,相当于[^a-zA-Z0-9_]
() :小括号
(1)改变优先级别
(2)将小原子变成大原子 (add)* 就是add这个单词任意次,不是d字符任意次 add*
正则表达式,项目常用案例
//(注册用户名) 20位以内,英文小写和数字 en
"/^[a-z][a-z0-9]{0,19}$/";
//(注册用户名) 20位以内,带下划线的英文小写 en_
"/^[a-z_][a-z0-9_]{0,19}$/";
//(密码)英文小写和数字和_-!@ en_-@
"/^[a-z0-9_\-!@]{1,15}$/";
//纯英文小写 e
"/^[a-z]+$/";
//包含小数的数字 num1
"/^[0-9]{1,}[\.|0-9]{0,1}[0-9]{1,}$/";
//整数 num2
"/^[0-9]+$/";
//邮箱 email
"/^\w+([\-\+\.]\w+)*@\w+([\-\.]\w+)*\.\w+([\-\.]\w+)*$/";
// \w:[a-zA-Z0-9_]
//ab12-ab12@ab12.ab12.ab12-ab12
//手机 phone
"/^((\(\d{3}\))|(\d{3}\-)|(0))?1[34578]{1}\d{9}$/";
//固定电话 tel
"/^(\d{3}\-)(\d{8})$|^(\d{4}\-)(\d{7})$|^(\d{7})$|^(\d{8})$/";
//021-12345678
//0551-1234567
//1234567
//12345678
//邮政编码 zip
"/^[1-9]\d{5}$/";
//身份证 idcard
//(18位)
//3 40103 2006 07 07 333 X
//3 40103 2006 12 31 333 9
"/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}[\dX]{1}$/";
//ip 127.0.0.1 202.102.192.68 ip
"/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/";
