常用正则表达式收藏
常用正则表达式
手机号码
/^1[345789]\d{9}$/
邮箱
邮箱基本格式是 *****@**.**
@以前是一个 大小写的字母或者数字开头,紧跟0到多个大小写字母或者数字或 . _ - 的字符串
@之后到.之前是 1到多个大小写字母或者数字的字符串
.之后是 1到多个 大小写字母或者数字或者.的字符串
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
# 严格的
^[a-zA-Z0-9][a-zA-Z0-9._-]*\@[a-zA-Z0-9]+\.[a-zA-Z0-9\.]+$
中文
GBK (GB2312/GB18030)
x00-xff GBK双字节编码范围
x20-x7f ASCII
xa1-xff 中文 gb2312
x80-xff 中文 gbk
UTF-8 (Unicode)
u4e00-u9fa5 (中文)
^[\u4e00-\u9fa5]+$
邮政编码
规则:六位数字,第一位不能为0
^[1-9]\d{5}$
电话号码
规则:
区号:3到5位,大部分都是四位。北京(010)和上海市(021)三位,西藏有部分五位,可以包裹在括号内也可以没有
如果有区号由括号包裹,则在区号和号码之间可以有0到1个空格,如果区号没有由括号包裹,则区号和号码之间可以有两位长度的 或者-
号码:7到8位的数字
例如:(010) 12345678 或者 (010)12345678 或者 010 12345678 或者 010--12345678
# 简单的:仅检测 010-12345678 形式的
^\d{3}-\d{8}|\d{4}-\d{7}|\d{7}|\d{8}$
# 严格的
^(((010)|(021)|(0\d3,4))( ?)([0-9]{7,8}))|((010|021|0\d{3,4}))([- ]{0,2})([0-9]{7,8})$
URL
规则:
协议://域名(www/tieba/baike...).名称.后缀/文件路径/文件名
http://zhidao.baidu.com/question/535596723.html
协议://域名(www/tieba/baike...).名称.后缀/文件路径/文件名?参数
www.lhrb.com.cn/portal.php?mod=view&aid=7412
协议://域名(www/tieba/baike...).名称.后缀/文件路径/文件名/参数
http://www.xugou.com.cn/yiji/erji/index.php/canshu/11
协议:可有可无,由大小写字母组成;不写协议则不应存在://,否则必须存在://
域名:必须存在,由大小写字母组成
名称:必须存在,字母数字汉字
后缀:必须存在,大小写字母和.组成
文件路径:可有可无,由大小写字母和数字组成
文件名:可有可无,由大小写字母和数字组成
参数:可有可无,存在则必须由?开头,即存在?开头就必须有相应的参数信息
# 简单的
^https?:\/\/.+$
# 严格的
^(([a-zA-Z]+)(:\/\/))?([a-zA-Z]+)\.(\w+)\.([\w.]+)(\/([\w]+)\/?)*(\/[a-zA-Z0-9]+\.(\w+))*(\/([\w]+)\/?)*(\?(\w+=?[\w]*))*((&?\w+=?[\w]*))*$
车牌号
^[\u4E00-\u9FA5][\da-zA-Z]{6}$
身份证号(IC)
规则: 15位纯数字或者18位纯数字或者17位数字加一位x
^(([0-9]{15})|([0-9]{18})|([0-9]{17}x))$
IP
规则:
格式: xx1.xx2.xx3.xx4
xx1可以是一位的 1-9,两位的01-99,三位的001-255
xx2和xx3可以是一位的0-9,两位的00-99,三位的000-255
xx4可以是一位的 1-9,两位的01-99,三位的001-255
四个参数必须存在
# 简单的:
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
# 严格的:
^((([1-9])|((0[1-9])|([1-9][0-9]))|((00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))))\.)((([0-9]{1,2})|(([0-1][0-9]{2})|(2[0-4][0-9])|(25[0-5])))\.){2}(([1-9])|((0[1-9])|([1-9][0-9]))|(00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5])))$
时间
规则:
形式可以为:
年-月-日 小时:分钟:秒
年-月-日 小时:分钟
年-月-日
年:1或2开头的四位数
月:1位1到9的数;0或1开头的两位数,0开头的时候个位数是1到9的数,1开头的时候个位数是1到2的数
日:1位1到9的数;0或1或2或3开头的两位数,0开头的时候个位数是1到9的数,1或2开头的时候个位数是0到9的数,3开头的时候个位数是0或1
小时:0到9的一位数;0或1开头的两位数,个位是0到9;2开头的两位数,个位是0-3
分钟:0到9的一位数;0到5开头的两位数,个位是0到9;
分钟:0到9的一位数;0到5开头的两位数,各位是0到9
^(([1-2][0-9]{3}-)((([1-9])|(0[1-9])|(1[0-2]))-)((([1-9])|(0[1-9])|([1-2][0-9])|(3[0-1]))))( ((([0-9])|(([0-1][0-9])|(2[0-3]))):(([0-9])|([0-5][0-9]))(:(([0-9])|([0-5][0-9])))?))?$
JavaScript用法
js里常使用regexp.test(string)
方法进行正则匹配。示例:
var reg = /^1[345789]\d{9}$/;
if(reg.test('13287656432')){
console.log('成功');
}
注意,js里的正则本身是个对象,不要加引号。匹配返回值:如果字符串string中含有与regexp匹配的文本,就返回true,否则返回false。
常用正则方法:
检测手机号:
function isMobile(num){
var reg = /^1[345789]\d{9}$/;
if(reg.test(num)){
return true;
}
return false;
}
检测中文:
function isChinese(str){
var reg = /^[\u4E00-\u9FA5]+$/;
if(reg.test(str)){
return true;
}
return false;
}
检测车牌号:
function isTruckNum(num){
var reg = /^[\u4E00-\u9FA5][\da-zA-Z]{6}$/;
if(reg.test(num)){
return true;
}
return false;
}
一个比较好用的正则匹配方法:
function is(type, value) {
var map = {
"English" : /^\w+$/,
"password" : /^.{6,20}$/,
"username" : /^\w{3,20}$/,
"int" : /^\d+$/,
"url" : /^https?:\/\/.+$/,
"Chinese" : /^[\u4e00-\u9fa5]+$/,
"mobile" : /^1[345789]\d{9}$/,
"ip" : /^\d+([\.:]\d+)+$/,
"telphone" : /^\d{3}-\d{8}|\d{4}-\d{7}|\d{7}|\d{8}$/,
"email" : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
"truck_num" : /^[\u4E00-\u9FA5][\da-zA-Z]{6}$/, //车牌号
};
return map[type].test(value);
}
注意最后一句map[type]
不能写成map.type
。
调用方法:
if(is('mobile', '13287656432')){
console.log('成功');
}
PHP用法
PHP里使用preg_match()
匹配正则。示例:
匹配手机号码:
if(preg_match('/^1[345789]\d{9}$/', '13287656432')){
echo '成功';
}
preg_match()
返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为 preg_match()
在第一次匹配后 将会停止搜索。 preg_match_all()
不同于此,它会一直搜索subject直到到达结尾。 如果发生错误 preg_match() 返回 FALSE 。
特别注意的是php里的中文匹配有点特殊。php中是用\x表示十六进制数据的。那么最终匹配中文的表达式是:
if(preg_match('"/^[\x{4e00}-\x{9fa5}]+/u"', '中文')){
echo '成功';
}
这里给个写的比较好的方法,可以检测常用的正则:
/**
* 类型判断
* @example is('url', 'baidu.com');//返回false
*/
function is($type, $var) {
$map = array(
'English' => '/^\w+$/',
'password' => '/^.{6,20}$/',
'username' => '/^\w{3,20}$/',
'int' => '/^\d+$/',
'url' => '/^https?:\/\/.+$/',
'Chinese' => '/^[\x{4e00}-\x{9fa5}]+$/u',
'mobile' => '/^1[345789]\d{9}$/',
'ip' => '/^\d+([\.:]\d+)+$/',
'telphone' => '/^\d{3}-\d{8}|\d{4}-\d{7}|\d{7}|\d{8}$/',
'email' => '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',
'truck_num' => '/^[\x{4e00}-\x{9fa5}][a-zA-Z\d]{6}$/u', //车牌号
);
return isset($map[$type]) && preg_match($map[$type], $var);
}
调用方法:
if(is('mobile', '13287656432')){
echo '成功';
}
Python用法
Python里使用re
模块的match()
方法进行正则匹配:
# coding: utf-8
import re
if re.match(r'^1[35789]\d{9}$', '13271222223'):
print('ok')
else:
print('not match')
如果匹配成功,返回一个Match
对象,否则返回None
。
参考:
1、正则表达式30分钟入门教程_脚本之家
http://www.jb51.net/tools/zhengze.html
2、php中utf-8编码下用正则表达式如何匹配汉字_正则表达式_脚本之家
http://www.jb51.net/article/19790.htm
3、http://blog.csdn.net/eightwhells/article/details/8935390
4、Python学习--16 正则表达式 - 飞鸿影~ - 博客园
http://www.cnblogs.com/52fhy/p/6376296.html
本文优先在公众号"飞鸿影的博客(fhyblog)"发布,欢迎关注公众号及时获取最新文章推送!
作者:飞鸿影
出处:http://52fhy.cnblogs.com/
版权申明:没有标明转载或特殊申明均为作者原创。本文采用以下协议进行授权,自由转载 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,转载请注明作者及出处。