常用正则表达式

手机号码

1
/^1[345789]\d{9}$/

邮箱

规则:

邮箱基本格式是 **@\*.
@以前是一个 大小写的字母或者数字开头,紧跟0到多个大小写字母或者数字或 . _ - 的字符串
@之后到.之前是 1到多个大小写字母或者数字的字符串
.之后是 1到多个 大小写字母或者数字或者.的字符串

1
2
3
4
^\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 (中文)

1
^[\u4e00-\u9fa5]+$

邮政编码

规则:

六位数字,第一位不能为0

1
^[1-9]\d{5}$

电话号码

规则:

区号:3到5位,大部分都是四位。北京(010)和上海市(021)三位,西藏有部分五位,可以包裹在括号内也可以没有
如果有区号由括号包裹,则在区号和号码之间可以有0到1个空格,如果区号没有由括号包裹,则区号和号码之间可以有两位长度的 或者-
号码:7到8位的数字
例如:(010) 12345678 或者 (010)12345678 或者 010 12345678 或者 010–12345678

1
2
3
4
5
# 简单的:仅检测  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
协议:可有可无,由大小写字母组成;不写协议则不应存在://,否则必须存在://
域名:必须存在,由大小写字母组成
名称:必须存在,字母数字汉字
后缀:必须存在,大小写字母和.组成
文件路径:可有可无,由大小写字母和数字组成
文件名:可有可无,由大小写字母和数字组成
参数:可有可无,存在则必须由?开头,即存在?开头就必须有相应的参数信息

1
2
3
4
5
# 简单的
^https?:\/\/.+$

# 严格的
^(([a-zA-Z]+)(:\/\/))?([a-zA-Z]+)\.(\w+)\.([\w.]+)(\/([\w]+)\/?)*(\/[a-zA-Z0-9]+\.(\w+))*(\/([\w]+)\/?)*(\?(\w+=?[\w]*))*((&?\w+=?[\w]*))*$

车牌号

1
^[\u4E00-\u9FA5][\da-zA-Z]{6}$

身份证号(IC)

规则:

15位纯数字或者18位纯数字或者17位数字加一位x

1
^(([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
四个参数必须存在

1
2
3
4
5
# 简单的:
^\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
^(([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)方法进行正则匹配。示例:

1
2
3
4
var reg = /^1[345789]\d{9}$/;
if(reg.test('13287656432')){
console.log('成功');
}

注意,js里的正则本身是个对象,不要加引号。匹配返回值:如果字符串string中含有与regexp匹配的文本,就返回true,否则返回false。

常用正则方法:

检测手机号:

1
2
3
4
5
6
7
8
function isMobile(num){
var reg = /^1[345789]\d{9}$/;
if(reg.test(num)){
return true;
}

return false;
}

检测中文:

1
2
3
4
5
6
7
8
function isChinese(str){
var reg = /^[\u4E00-\u9FA5]+$/;
if(reg.test(str)){
return true;
}

return false;
}

检测车牌号:

1
2
3
4
5
6
7
8
function isTruckNum(num){
var reg = /^[\u4E00-\u9FA5][\da-zA-Z]{6}$/;
if(reg.test(num)){
return true;
}

return false;
}

一个比较好用的正则匹配方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

调用方法:

1
2
3
if(is('mobile', '13287656432')){
console.log('成功');
}

PHP用法

PHP里使用preg_match()匹配正则。示例:

匹配手机号码:

1
2
3
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表示十六进制数据的。那么最终匹配中文的表达式是:

1
2
3
if(preg_match('"/^[\x{4e00}-\x{9fa5}]+/u"', '中文')){
echo '成功';
}

这里给个写的比较好的方法,可以检测常用的正则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 类型判断
* @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);
}

调用方法:

1
2
3
if(is('mobile', '13287656432')){
echo '成功';
}

Python用法

Python里使用re模块的match()方法进行正则匹配:

1
2
3
4
5
6
7
8
# 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

本文转载自 https://www.cnblogs.com/52fhy/p/5616487.html