常用的正则表达式
验证有效数字
0, 1, 2, 3, -1, -2, -3
10, 20, 30, -10, -20, -30
11.1, 22.2, -11.1, -22.2
+1, +2, +3
01, 002, 0003
/**
* 规则分析
* 1. 可能出现 +, - 号, 也可能不出现 [+-]?
* 2. 一位数 0~9都可以, 多位数开头不能为0 \d|[1-9]\d+
* 3. 小数点可以有(一旦有必须跟上数字), 可以无 (\.\d+)?
*/
let reg = /^[+-]?(\d|[1-9]\d+)(\.\d+)?$/;
console.log(reg.test('+20.00')) // true
console.log(reg.test('20.0')) // true
console.log(reg.test('0.0')) // true
console.log(reg.test('+003')) // false
console.log(reg.test('-003')) // false
console.log(reg.test('3.')) // false
console.log(reg.test('-003.02')) // false
console.log(reg.test('+05a2.3')) // false
验证密码
// => 数字, 字母, 下划线
// => 6~16位
let reg = /^[0-9a-zA-Z_]{6,16}$/;
let reg = /^\w{6,16}$/;
验证真实姓名
刘某某
邢某某
佛拉基米尔·某某某
佛拉基米尔·某某某·某某某
/**
* 1. 汉字(汉字的Unicode编码位 \u4E00-\u9FA5 ) /^[\u4E00-\u9FA5]$/
* 2. 名字长度位 2~10 位
* 3. 会有译名的出现, 以为·隔开
*/
let reg = /^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]+){0,2}$/;
console.log(reg.test('刘某某')) // => true
console.log(reg.test('邢某某')) // => true
console.log(reg.test('佛拉基米尔·某某某')) // => true
console.log(reg.test('佛拉基米尔·某某某·某某某')) // => true
验证邮箱(分析)
let reg =
/^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
/**
* 1. 出现在 @ 符号之前的, \w+((-\w+)|(\.\w+))*
* - 邮箱开头是数字丶字母丶下划线
* - 中间可以被 - 和 . 进行划分, 可以出现 0~多次 (xx.xx@ xx-xx@ xx.xx-xx@)
*
* 2. [A-Za-z0-9]+
* - 邮箱的域名 @qq @123con @xxx...
*
* 3. ((\.|-)[A-Za-z0-9]+)*
* - 对邮箱域名的补充, 有些邮箱格式是 xxx@123.456-ali xxx@qq-226.youxiang
* - 多域名: xxxxx@123.com.cn.net
* - 企业邮箱: xxxxx@123.youxiang-qiye.com
*
* 4. \.[A-Za-z0-9]+
* - 捕捉最后的邮箱域名 .cn .com .net .edu ...
*/
身份证号码验证
/**
* 1. 一共18位
* 2. 最后一位可能是X
*
* 身份证前6位: 省市县
* 中间八位: 年月日
* 最后四位:
* - 前两位: 算法计算, 公安局编码
* - 第三位: 性别(单:男, 双:女)
* - 第四位: X或数字
* 330109200012044322
*/
let reg = /^\d{6}(1|2)\d{10}(\d|X)$/;
console.log(reg.test('31610910001201132X'))
console.log(reg.test('130109201112041413'))
// () 配合 exec 还有一个作用为分组匹配
let reg = /^(\d{6})(\d{4})(\d{4})\d{2}(\d)(\d|X)$/;
console.log(reg.exec('31610910001201132X'))
// Array(6) [ "31610910001201132X", "316109", "1000", "1201", "2", "X" ]
// 第一个参数为匹配的字符串, 剩余的为()分组匹配出的结果
console.log(reg.exec('130109201112041413'))
// Array(6) [ "130109201112041413", "130109", "2011", "1204", "1", "3" ]
// 第一个参数为匹配的字符串, 剩余的为()分组匹配出的结果