陈广安个人网站
会写代码的咸鱼
陈广安个人网站阿里云盘资源
陈广安个人网站网盘资源搜索
“ 梦想还是要有的,万一实现了呢!”
— 马云

常用的正则表达式案例

创建时间:2017-03-04

用户名

/^[a-z0-9_-]{3,16}$/


密码

/^[a-z0-9_-]{6,18}$/


目前所知,移动的号码段有

134,135,146,137,138,139

157,158,159

新增的3G号码 182,183,188

手机号码一共11位,前面三位为运营商号段,中间四位为归属地,后四位为随机号


需要检测手机号码

$mobile = "13400000000";


如果是判断是否为运营商号码

//检测手机号码的正则表达式
$regex1 = "/^(13[4-9]|15[0189]|18[238])\d{8}$/";


如果是只判断手机号码

//检测手机号码的正则表达式
$regex2 = "/1[358]\d{9}/";//简单的手机号码正则表达式


匹配邮箱

E-mail最简单的形式为user@qq.com

其中user为用户名,qq为域名,com为后缀

一般用户名由3个以上的字母和数字组成,一般为16位,允许出现下划线,中间一个@符号

后面域名长度为1-64位,后缀长度一般为2-5位


需要检测邮箱

$mail = "mrchenanan@163.com";


正则表达式,匹配用户名长度为3-16位,紧跟一个@符号,然后1-64位的域名,

然后是一个.符号,最后是2-5位的后缀

//邮箱的正则表达式
$regex3 = "/w{3,16}@\w{1,64}\.\w{2,5}/";
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/



上述正则表达式能匹配大多数的邮箱,比如xxx_yyy@ya-hoo.com.cn这样的地址,后面的.cn就无法匹配到。

if(!preg_match($regex1,$mobile)){
    echo '<script>正确</script>';
}else{
    echo '<script>错误</script>';
}


过滤所有HTML标签

匹配嵌套的尖括号, \/?表示斜杠可有可无,这样就可以匹配标签的起始和关闭位置

[^>]+ 的意思是,如果不是又尖括号的字符重复一次和更多次

$regex4 = "<\/?[^>]+>";
$str = "<div>哈哈</div>";
preg_replace($regex4,'',$str);//用正则去匹配,替换为空
echo $str;


有时候,我们需要保留部分HTML标签,既不造成安全问题,又能使页面内容更丰富,这就可以利用UBB代码功能来实现

用正则表达式实现UBB标签的功能比较麻烦

通过PHP内置的函数strip_tags函数可以容易做到白名单功能,即保留比较 安全 的标签

$text = '<p>mrchen.</p><!--commetnt--><a href="mrchen.top">个人网站</a>';
echo strip_tags($text);//去除所有的HTML标签和PHP标签
echo "<br/>";
echo strip_tags($text,'<p><a>');//允许<p>和<a>