re模块常用的正则匹配
1、手机号码
/^[1][3,4,5,6,7,8,9][0-9]{9}$/
2、身份证的校验
/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
3、邮箱的校验
/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
4、URL的校验
/^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
5、IPv4的校验
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
/^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/
6、16进制颜色的校验
/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
7、日期 YYYY-MM-DD
/^\d{4}(\-)\d{1,2}\1\d{1,2}$/
8、日期 YYYY-MM-DD hh:mm:ss
/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/
9、整数的校验
/^[-+]?\d*$/
10、小数的校验
/^[-\+]?\d+(\.\d+)?$/
11、保留n位小数
function checkFloat(n) {
return new RegExp(`^([1-9]+[\d]*(.[0-9]{1,${n}})?)$`)
}
// 保留2位小数
const floatReg = checkFloat(2)
const floatNum1 = 1234.5
console.log(floatReg.test(floatNum1)) // true
const floatNum2 = 1234.55
console.log(floatReg.test(floatNum2)) // true
const floatNum3 = 1234.555
console.log(floatReg.test(floatNum3)) // false
12、邮政编号的校验
/^\d{6}$/
13、QQ号的校验
说明:5-11位数字
/^[1-9][0-9]{4,10}$/
14、微信号的校验
说明:6至20位,以字母开头,字母,数字,减号,下划线
/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/
15、车牌号的校验
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
16、只含字母的字符串
/^[a-zA-Z]+$/
17、包含中文的字符串
/[\u4E00-\u9FA5]/
18、密码强度的校验
说明:密码中必须包含字母、数字、特称字符,至少8个字符,最多30个字符
/(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,30}/
19、字符串长度n的校验
function checkStrLength(n) {
return new RegExp(`^.{${n}}$`)
}
// 校验长度为3的字符串
const lengthReg = checkStrLength(3)
const str1 = 'hhh'
console.log(lengthReg.test(str1)) // true
const str2 = 'hhhhh'
console.log(lengthReg.test(str2)) // false
20、文件拓展名的校验
function checkFileName (arr) {
arr = arr.map(name => `.${name}`).join('|')
return new RegExp(`(${arr})$`)
}
const filenameReg = checkFileName(['jpg', 'png', 'txt'])
const filename1 = 'sunshine.jpg'
console.log(filenameReg.test(filename1)) // true
const filename2 = 'sunshine.png'
console.log(filenameReg.test(filename2)) // true
const filename3 = 'sunshine.txt'
console.log(filenameReg.test(filename3)) // true
const filename4 = 'sunshine.md'
console.log(filenameReg.test(filename4)) // false
21、匹配img和src
const imgReg = /<img.*?src=[\"|\']?(.*?)[\"|\']?\s.*?>/ig
const htmlStr = '<div></div><img src="sunshine.png" /><img src="sunshine111.png" />'
console.log(imgReg.exec(htmlStr))
// [
// '<img src="sunshine.png" />',
// 'sunshine.png',
// index: 11,
// input: '<div></div><img src="sunshine.png" /><img src="sunshine111.png" />',
// groups: undefined
// ]
console.log(imgReg.exec(htmlStr))
// [
// '<img src="sunshine111.png" />',
// 'sunshine111.png',
// index: 37,
// input: '<div></div><img src="sunshine.png" /><img src="sunshine111.png" />',
// groups: undefined
// ]
22、匹配html中的注释
const noteReg = /<!--(.*?)-->/g
const htmlStr = '<!--一个div标签--> <div></div> <!--一个div标签--> <div></div>'
console.log(noteReg.exec(htmlStr))
// [
// '<!--一个div标签-->',
// '一个div标签',
// index: 0,
// input: '<!--一个div标签--> <div></div> <!--一个div标签--> <div></div>',
// groups: undefined
// ]
console.log(noteReg.exec(htmlStr))
// [
// '<!--一个div标签-->',
// '一个div标签',
// index: 27,
// input: '<!--一个div标签--> <div></div> <!--一个div标签--> <div></div>',
// groups: undefined
// ]
23、匹配html中的style
const styleReg = /style="[^=>]*"([(\s+\w+=)|>])/g
const htmlStr = '<div style="background:#000;"><span style="color:#fff"></span></div>'
console.log(styleReg.exec(htmlStr))
// [
// 'style="background:#000;">',
// '>',
// index: 5,
// input: '<div style="background:#000;"><span style="color:#fff"></span></div>',
// groups: undefined
// ]
console.log(styleReg.exec(htmlStr))
// [
// 'style="color:#fff">',
// '>',
// index: 36,
// input: '<div style="background:#000;"><span style="color:#fff"></span></div>',
// groups: undefined
// ]
24、匹配html中的颜色
const colorReg = /#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/g
const htmlStr = '<div style="background:#000;"><span style="color:#fff"></span></div>'
console.log(colorReg.exec(htmlStr))
// [
// '#000',
// '000',
// index: 23,
// input: '<div style="background:#000;"><span style="color:#fff"></span></div>',
// groups: undefined
// ]
console.log(colorReg.exec(htmlStr))
// [
// '#fff',
// 'fff',
// index: 49,
// input: '<div style="background:#000;"><span style="color:#fff"></span></div>',
// groups: undefined
// ]
25、匹配htmlTag(html标签)
const endReg = /<("[^"]*"|'[^']*'|[^'">])*>/g
const htmlStr = '<div style="background:#000;"><span style="color:#fff"></span></div><h1></h1>'
console.log(endReg.exec(htmlStr))
console.log(endReg.exec(htmlStr))
console.log(endReg.exec(htmlStr))
console.log(endReg.exec(htmlStr))
console.log(endReg.exec(htmlStr))
console.log(endReg.exec(htmlStr))
26、ip地址:
^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$
27、域名
# 以Https、Http开头
^(http|https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
28、端口号
/((6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])|[0-5]?\d{0,4})+$/
带有端口号的ip地址和域名
^(http|https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?(:(6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])|[0-5]?\d{0,4})?$
^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)(:(6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])|[0-5]?\d{0,4})?$
29、用户名(大小写字母、数字、下划线和中文)
限制长度
/^[\u4e00-\u9fa5_a-zA-Z0-9]{4,10}$/
不限制长度
/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/
不能以下划线开头和结尾
/^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$/
中文字符
/[\u4e00-\u9fa5]/
匹配双字节字符(包括汉字在内)
/[^\x00-\xff]/
python2中匹配中文字符
pattern = u"^[\u4e00-\u9fa5a-zA-Z0-9]+"
username = re.match(pattern, username)