常用正则表达式收藏

常用正则表达式

手机号码

/^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

posted @ 2016-06-25 17:40 飞鸿影 阅读(...) 评论(...) 编辑 收藏