Keep on going, never give up.

PHP常用正则表达式收集整理

本文整理一些常用的PHP正则表达式,天缘每次用到也都是查一查,网上到处转载的很多正则表达式,已经很难找到原作者的出处了,而且很多表达式都未提及限定条件和匹配情况,天缘本文整理的正则表达式全都经过测试,暂未通过的先注明一下稍后再完善,并对匹配限制情况给以说明,可以随时取用,对有限定条件的,实际使用时请根据自己情况略做调整。

以下为天缘测试验证过的正则表达式,当然也不排除有些还有点问题,欢迎指出修正:

 匹配类型  正则表达式  备注
匹配帐号是否合法 ^[a-zA-Z]w{2,15}$ 必须以字母开头,3-16字符之间,可包含下划线
匹配英文字母字符串 ^[A-Za-z]+$ 如果只匹配大写把a-z去掉即可,如果只匹配小写把A-Z去掉即可,
匹配由数字和英文字母组成字符串 ^[A-Za-z0-9]+$ 全文必须由数字、字母组成
匹配由数字、字母或者下划线组成字符串 w+$ 全文必须由数字、字母和下划线组成
     
匹配Email地址 ^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$  
匹配网址URL ^[a-zA-z]+://[^s]* 只能匹配URL的大概样式。
匹配电话号码 (d{3}-d{8})|(d{4}-d{7})$ 国内电话三位区号+8位号码或4位区号+7位号码
匹配QQ号 ^[1-9]d{4,} 10000以上
匹配邮政编码 [1-9]d{5}(?!d) 国内邮编6位
匹配身份证 d{15}|d{18} 身份证15或18位
     
匹配中文字符(GB2312) "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i"

 

匹配中文字符(UTF-8) /^[\x{4e00}-\x{9fa5}]+$/ 随PHP版本不同,有可能需改成/^[\x{4e00}-\x{9fa5}]+$/u
匹配全角字符 ^[x{80}-x{ff}]+$ 中文包含在内
匹配首尾空白字符 ^s+|s$  
匹配IP地址 d+.d+.d+.d+  只能匹配四个带点的数字,没限定位数也未限定数字大小
匹配UBB标签 ([abc])(.*)([/abc])

一般用来提取或替换,比如preg_replace("([IMG])(.*)([/IMG])",'<img src="2">',$s);

去掉所有<a></a>超级链接 <a [^>]*>|</a> 一般用来提取或替换,比如preg_replace("<a [^>]*>|</a>","",$s)
     
匹配整数 ^-?[1-9]d*$  
匹配正整数 ^[1-9]d*$  
匹配负整数 ^-[1-9]d*$  
匹配非负整数(正整数 + 0) ^[1-9]d*|0$  
匹配非正整数(负整数 + 0) ^-[1-9]d*|0$  
匹配浮点数 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  
匹配正浮点数 ^[1-9]d*.d*|0.d*[1-9]d*$  
匹配负浮点数 ^-([1-9]d*.d*|0.d*[1-9]d*)$  
匹配非负浮点数(正浮点数 + 0) ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$  
匹配非正浮点数(负浮点数 + 0) ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  
     

测试匹配程序:

<?php

$pregArr = array(

    array('^[a-zA-Z]w{2,15}$','aAAaaa','aa','Aa^Bbb'),

    array('^[A-Za-z]+$','AAaab','metsky.com','Aa^Bbb'),

    array('^[A-Za-z0-9]+$','aAb88','a_a','Aa^Bbb'),
   
    array('^w+$','Aa22__6','Aa22(())','Aa^Bbb'),   

    array('^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$','5a-b_c@metsky.com','abdd%@metsky.com',''),

    array('^[a-zA-z]+://[^s]*','http://www.metsky.com','https://www.metsky.com','www.metsky.com'),

    array('(d{3}-d{8})|(d{4}-d{7})$','0588-8888888','021-metsky','0211-88metsky'),   

    array('^[1-9]d{4,}','10000','aa8889','65'),

    array('[1-9]d{5}(?!d)','123456','a12345','123_45'),

    array('d{15}|d{18}$','123456789012345','12345678901234A','123456'),   

    array('^[x{4e00}-x{9fa5}]+$','天缘博客b','abc','天缘_博客'),

    array('^[x{80}-x{ff}]+$','天缘博客','aa','天缘博客A'),

    array('^(s+)|(s+$)',' aA_b88','aa','Aa Bbb'),

   array('d+.d+.d+.d+','8.8.8.8','123.dd.123.123','8.8.8'),

    array('([abc])(.*)([/abc])','[abc]我是在abc中间[/abc]','[abc]sdf','[abcabc]'),   

    array('<a [^>]*>|</a>','<a >我是在<a>之间</a>','<a><<< /a>','<a <<</a'),

);

foreach($pregArr as $kp=>$vp)
{
    if(preg_match('/'.$vp[0].'/',$vp[1],$arr))
        echo $kp."____OK.<br/>";
    else
        echo $kp."______________Err.<br/>";
}

?>

 

参考资料:

维基百科:http://zh.wikipedia.org/zh-cn/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

 

更多文章:

PHP字符串正则替换及剖分函数比较

PHP不执行短标签却源码显示输出的问题定位

PHP中如何发送HEADER头消息

VC++下使用ADO访问Access数据库完整篇

利用Ajax无刷新验证用户名、密码和邮箱等输入信息

Javascript的getYear、getFullYear、getUTCFullYear方法异同

BMP位图文件格式详解及编程建议

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.