包含 : 纯文字、正负数,小数、正数、正整数、月份、天数、用户名、密码、车牌、传真、手机、邮件、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")