4 -【实战】正则实例集合、不捕获分组

128 阅读2分钟

一、正则实例集合

1. 输入框校验-不允许输入非数字

var str = '23t',
    reg = /\D/g;
console.log('非数字', reg.test(str)); //true

2. 输入框校验-只允许输入字母、数字、下划线(表达式里^是非的意思)

var str = '23t',
    reg = /[^0-9A-z_]+/g;
console.log(reg.test(str)); //true 

3. 身份证校验

var str = '44088319930420396X',
    reg = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[1-9Xx]$/;
console.log('身份证校验', reg.test(str)); //true

4. 密码校验-至少含有数字、大小写、特殊字符的6位及以上字符

var str = '23Dt*12',
    reg = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[~!@#$%^&*?]).*$/;
console.log(reg.test(str)); //true   

5. 图片格式校验

var str = '866.png',
    reg = /(\.jpg|\.png|\.jpeg|\.gif)/;
console.log(reg.test(str)); //true   

6. 用户名校验(4-16位)

var str = 'may0420',
    reg = /[0-9A_z_]{4,16}/;
console.log(reg.test(str)); //true   

7. 正、负整数校验

var reg = /^-?\d+$/; 
console.log(reg.test('-123')); // true

8. 邮箱校验

var str = '9855@qq.com.cn',
    reg = /^([0-9A-z_-])+\@([A-z0-9_\-\.]+\.+([A-z]{2,4}))$/;
console.log(reg.test(str)); //true

9. 座机校验

var str = '028-28564268',
    reg = /^(([0\+]\d{2,3})-)?(0\d{2,3}-)(\d{7,8})(-(\d{3,}))?$/g;
console.log(reg.test(str)); //true

10. 手机号码校验

var str = '(+86)13542050215',
    reg = /^(\(\+86\))?(1(3[0-9]|4[014-9]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8})$/g;
console.log(reg.test(str)); //true

11. 日期校验

1990-05-28 1993/12/01 1995.05.26 1997-10/01

var str = '1990-05-08',
    reg = /^(19|20)\d{2}([-/.])(0[1-9]|1[0-2])\2(0[1-9]|[1-2][0-9]|3[01])/g;
console.log(reg.test(str)); //true

12. 颜色值校验

var str = '#000',
    reg = /^#([A-Fa-f0-9]){6}|([A-Fa-f0-9]){3}/g;
console.log(reg.test(str)); //true

13. QQ号校验,5-10位

var str = '975530192',
    reg = /^[1-9][0-9{4,9}]/g;
console.log(reg.test(str)); //true

14. 微信号校验,6-20位

var str = 'q975530192',
    reg = /^[A-z]([A-z0-9_-]{5,19})+$/;
console.log(reg.test(str)); //true

15. 车牌号校验

var str = '琼ASP430',
    reg = /[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{1}[A-Z]{1}[A-Z0-9]{5}$/;
console.log(reg.test(str));

16. 匹配001-100的数字,支持1-99,01-099,001-099

var reg = /^(0?(0?[1-9]|[1-9]\d)|100)$/;
console.log(reg.test(0)); // false
console.log(reg.test(2)); //true
console.log(reg.test(02)); //true
console.log(reg.test(002)); //true
console.log(reg.test(020)); //true
console.log(reg.test(100)); //true

17. 过滤掉多余的0,例如:000.10-->0.10, 0010.5-->10.5

var str = '000.10';
str.replace(/^0*(?!.)/, ''); //"0.10"

18. 替换某个特定字符后面的值:例如:11:00:32-13:00:32,将‘-’后面的时间替换成另一个时间

let str = "11:00:32-13:00:32",
    reg = /(?<=-).+/g;
let res = str.replace(reg, '12:01:32'); //"11:00:32-12:01:32"

//简写:'11:00:32-13:00:32'.replace(/(?<=-).+/g, '12:01:32')

19. 将字符串"/A/B/C"变成字符串数组["/A", "/B", "/C"]

let str = "/A/B/C";
str.split(/\b(?=/)/g); // ["/A", "/B", "/C"]

二、不捕获分组 ?:不捕获分组,参与正则匹配,不单独被正则捕获出来

1. 不捕获分组

var str = '975530192@qq.com',
    reg = /^(?:[A-z0-9_])+\@(?:[A-z0-9_\-\.]+\.(?:[A-z]{2,4}))$/;
console.log(reg.test(str)); //true 
//["975530192@qq.com", index: 0, input: "975530192@qq.com", groups: undefined]A

2. 捕获分组

var str = 'abcabc',
    reg = /(a)(b)(c)/g;
console.log(str.match(reg)); // ["abc", "abc"]