正则block2

182 阅读1分钟

/**
 * 常用正则表达式
 */

/**
 * 1.验证是否为有效数字
 * 规则分析
 * a.可能出现+ - 号  [+-]?
 * b.一位0到9都可以,多位首位不能为0 (\d|([1-9]\d+))
 * c.小数部分可能有可能没有,一旦有后面必须有小数点加数字(\.\d+)?
 */

let numReg = /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;

/**
 * 2.验证密码
 * a.数字字母下划线
 * b.6-16位
 */

let passWordReg = /^\w{6,16}$/;

/**
 * 3.验证真实姓名
 * a.汉字  /^[\u4E00-\u9FA5]$/
 * b.名字长度 2-10位
 * c.可能有佚名  ·汉字
 */

let nameReg = /^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]{2,10}){0,2}$/;

/**
 * 4.验证邮箱
 */

let mailReg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;

// => \w+((-\w+)|(\.\w+))*
// 1.开头是数字字母下划线(1到多位)
// 2.接下来是 -数字字母下划线 或者 .数字字母下划线, 整体0到多次
// 邮箱的名字可以 为xx-xx-xx xx.xx.xx xx.xx-xx等模式

//=> @[A-Za-z0-9]+
//1.@后面紧跟着数字字母下划线(1到多位)

//=> ((\.|-)[A-Za-z0-9]+)*
//1,对@后面名字的补充
//多域名邮箱 .com.cn
//企业邮箱 @qianbian-corp-office.com

//=> \.[A-Za-z0-9]+
//1,  匹配最后的域名(.com/.cn/.org 等等)

/**
 * 5.身份证号码
 * 1.一共18位
 * 2.最后一位可能是X
 * 3.身份证前六位:省市县
 * 4.z中间八位: 年月日
 * 5.最后四位:最后一位 x或者数字 倒数第二位 偶数女奇数男
 */

//=>小括号分组的第二个作用:分组捕获,不仅可以把大正则匹配的信息捕获到,还可以单独捕获到每个小分组的内容

let idCardReg = /^(\d{6})(\d{4})(\d{2})(\d{2})\d{2}(\d)(\d|X)$/;

idCardReg.exec('513901199307150214'); // ["513901199307150214", "513901", "1993", "07", "15", "1", "4", index: 0, input: "513901199307150214", groups: undefined]  捕获结果是数组,包含每一个小分组单独获取的内容

/**
 * 正则两种创建方式的区别
 */
//构造函数因为传递的是字符串, \需要写两个转义才能代表斜杠
let reg = /\d+/g;
reg = new RegExp('\\d+', 'g');

// => 正则表达式的部分内容是变量存储的值
// 1.两个斜杠中间包起来的都是元字符(如果正则中要包含某个变量的值,则不能使用字面量方式创建)
// 2. 这种情况只能使用构造函数方式
let type = 'zhufeng';

reg = new RegExp('^@' + type + '@$');

reg.test('@zhufeng@'); //=>true2