zoukankan      html  css  js  c++  java
  • 正则表达式大全 --【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)|(0d{3,4})))( ?)([0-9]{7,8}))|((010|021|0d{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")
    更多内容,可访问:http://rexyan.cn
  • 相关阅读:
    inline-block图文布局
    display: inline-block换行问题
    前端Fiddler高级调试技巧
    开发人员linux命令总结
    随笔-系统安装
    Fiddler高阶技能-项目文件代理
    译:如何使用时间轴工具
    jquery 选择器之children与find
    ASP.NET 大文件下载的实现思路及代码
    Git 使用指南
  • 原文地址:https://www.cnblogs.com/rexyan/p/7243521.html
Copyright © 2011-2022 走看看