正则表达式大全 --【Python举例】

包含 :  纯文字、正负数,小数、正数、正整数、月份、天数、用户名、密码、车牌、传真、手机、邮件、ipv4私有地址、ipv4地址、ipv6地址、json_header、request_header

有时候自己写觉得很麻烦(关键是写得不咋对,总漏掉一些)。现在有了例子之后,方便了很多。

 1 # -*- coding: utf-8 -*-
 2 import re
 3 
 4 class Validate:
 5     reglist = {
 6         'CH': r'[^\u0000-\u00FF]*',                                                # 纯文字
 7         'number': r'([-]?[0-9]+(\.[0-9]+){0,1})',                                  # 正负数,小数
 8         'positive': r'([0-9]+(\.[0-9]+){0,1})',                                    # 正数
 9         'positive_integer': r'([0-9]+)',                                           # 正整数
10 
11         'month': r'(0?[1-9]|1[0-2])',                                              # 月份
12         'day': r'((0?[1-9])|((1|2)[0-9])|(3[01]))',                                # 天数
13         'time': r'(0?[1-9]|1[0-9]|2[0-4])((:|-|\/|\\)(0?[0-9]|[1-5][0-9])){2}',
14 
15         'username': r'[a-zA-Z0-9_\-]{1,}',                                         # 用户名:长度至少为1,包含大小写字母、数字、_、-
16         'password': r'[a-zA-Z0-9]{6,}',                                            # 密码:大小写字母或数字,长度至少6位
17         'password_easy': r'.{6,16}',                                               # 密码:6到16位的任意(除开斜线)
18         'password_hard': r'(?=.*[0-9])(?=.*[a-zA-Z])(.{6,12})',                    # 密码:数字 + 字母(大写或小写) + 长度6到12位
19         'password_hard1': r'(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(.{8,})',             # 密码:数字 + 字母(大写和小写) + 长度6到12位
20 
21         'date': r'[1-9][0-9]{0,3}(?:年|\||\\|\/|\s|,|、|-)(0?[1-9]|1[0-2])(?:月|\||\\|\/|\s|,|、|-)((0?[1-9])|((1|2)[0-9])|(3[01]))日?',
22         'birthday': r'(19|20)[0-9]{2}(:|-|\/|\\)(((0?[1-9]|1[0-2])(:|-|\/|\\)(0?[1-9]|1[0-9]|2[0-9]))|((0?[13-9]|1[0-2])(:|-|\/|\\)(30))|((0?[13578]|1[02])(:|-|\/|\\)(31)))',
23         'birthday_hard': r'(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)',
24 
25         'credit': '[1-9][0-9]{5}[1-9][0-9]{3}((0[0-9])|(1[0-2]))(([0|1|2][0-9])|3[0-1])[0-9]{3}([0-9]|x|X)',
26         'carcode': '[\u4E00-\u9FA5]{1}[A-Z]{1}[A-Z0-9]{5}',                        # 车牌
27 
28         'qq': r'[1-9][0-9]{4,}',
29         'fax': r'^[+]{0,1}([0-9]){1,3}[ ]?([-]?(([0-9])|[ ]){1,12})+',             # 传真
30         'phone_common': r'([0-9]{3}-[0-9]{8}|[0-9]{4}-[0-9]{7}|[0-9]{8}|1[0-9]{10})',
31         'phone': r'(\(((010)|(021)|(0\d{3,4}))\)( ?)([0-9]{7,8}))|((010|021|0\d{3,4}))([- ]{1,2})([0-9]{7,8})',
32         'mobile': r'((13[0-9])|147|(15[0-35-9])|180|182|(18[5-9]))[0-9]{8}',       # 手机
33         'email': r'([a-zA-Z0-9_\.\-])+\@([a-zA-Z0-9\-])+(\.([a-zA-Z0-9]{2,6}))+',  # 邮件
34         'url': r'(([a-zA-Z]+)(:\/\/))?([a-zA-Z]+)\.(\w+)\.([\w.]+)(\/([\w]+)\/?)*(\/[a-zA-Z0-9]+\.(\w+))*(\/([\w]+)\/?)*(\?(\w+=?[\w]*))*((&?\w+=?[\w]*))*',  # URL1
35         'URL': r'((http|ftp|https)://)?(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}(\.[0-9]{1,3}){3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\&%_\./-~-]*)?',  # URL2
36         'ipv4Agent': r'(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2[0-9]|3[01]))',   # ipv4私有地址
37         'ipv4': r'[0-9]{1,3}(\.[0-9]{1,3}){3}',                                    # ipv4地址
38         'ipv6': r'[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})',                              # ipv6地址
39         'json_header': r'application/x-www-form-urlencoded',                       # json_header
40         'request_header': r'httputil',                                             # request_header
41         'all': r'.*',                                                              # 所有
42     }
43 
44     @classmethod
45     def _find_reg(self, reg_type):
46         if reg_type in self.reglist:
47             return self.reglist[reg_type]
48         else:
49             return False
50 
51     @classmethod
52     def check(cls, value, reg_type="all"):
53         try:
54             # print re.match(r'^{0}$'.format(cls._find_reg(reg_type)), value, re.M).group()
55             return re.match(r'^{0}$'.format(cls._find_reg(reg_type)), value, re.M) is not None
56         except TypeError:
57             return False
58 
59     @classmethod
60     def has(cls, value, reg_type="all"):
61         try:
62             return re.search(r'{0}'.format(cls._find_reg(reg_type)), value, re.M) is not None
63         except TypeError:
64             return False
65 
66 
67 if __name__ == '__main__':
68     print Validate.check("43424fsfsdfsdfA", reg_type="password_hard1")

 

posted @ 2017-07-27 10:40  Rex_Blog  阅读(475)  评论(0编辑  收藏  举报