javascript中正则匹配多个条件, 常用正则匹配


注意: 本篇文章是根据在下日常编码过程中逐渐丰富的, 越往后看, 收获越丰富, 收藏起来以后随时回顾

准备工作
	1, 汉字和unicode码的在线转换网址
		http://tool.chinaz.com/tools/unicode.aspx
	2, 正则在线生成地址
		http://tools.jb51.net/regex/create_reg

正则表达式常用方法

截图来自:: https://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现

目标: 把 “2021年10月29日 12:43:46” 中, ‘年’和’月’替换为’-', '日’替换为 ’ '
1, 常用替换方法实现

let str= "2021年10月29日 12:43:46";
str = str.replace("年","-")
str = str.replace("月","-")
str = str.replace("日","")
console.log(str)// 2021-10-29 12:43:46

2, 替换为 js正则 + unicode编码 实现

let str= "2021年10月29日 12:43:46";
str = str.replace(/[\u5e74]/g,"-")
str = str.replace(/[\u6708]/g,"-")
str = str.replace(/[\u65e5]/g,"")
console.log(str)// 2021-10-29 12:43:46

3, 简略写法, 一行搞定

//  第一种写法
let str= "2021年10月29日 12:43:46";
str = str.replace(/[\u5e74]|[\u6708]/g, "-").replace(/[\u65e5]/g, "")
//  第二种写法
"2021年10月29日 12:43:46".replace(/[\u5e74]|[\u6708]/g, "-").replace(/[\u65e5]/g, "")
console.log(str)// 2021-10-29 12:43:46
// 第三种写法
str = '2021年11月12日';
str = str.replace(/[\u5e74\u6708\u65e5]/g,function(a){
    switch(a){
    case '年':
        return '-';
    case '月':
        return '-';
    case '日':
        return '';
    }
});
console.log(str);// 2021-11-12
// 感觉还有更高级更牛叉的写法, 我找了半天没找出来, 希望大家有更高级写法的留言, 我会及时更新让大家少走弯路

其他的常用正则匹配

// 匹配国内手机号(暗坑,由于手机号发展较快,建议直接限定11位,其他不做校验)
/0?(13|14|15|16|17|18|19)[0-9]{9}/.test('13233333333')

// 匹配国内电话号
/[0-9-()()]{7,18}/.test('4908595')

// 匹配email
/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test('21111111111@qq.com')

// 匹配日期
/\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}/.test('2011-11-11')

// 匹配邮政编码
/\d{6}/.test('100000')

// 匹配身份证号
/\d{17}[\d|x]|\d{15}/.test('14152320111111503X')

// 是否存在中文字符
/[\u4e00-\u9fa5]/.test('文字文字')

// 是否所有文字全是中文字符
/^[\u4e00-\u9fa5]+$/i.test("中文中文")

/* 验证数字:*/ ^[0-9]*$ 
/* 验证n位的数字:*/ ^\d{n}$ 
/* 验证至少n位数字:*/ ^\d{n,}$ 
/* 验证m*/ -n位的数字:^\d{m,n}$ 
/* 验证零和非零开头的数字:*/ ^(0|[1-9][0-9]*)$ 
/* 验证有两位小数的正实数:*/ ^[0-9]+(.[0-9]{2})?$ 
/* 验证有1*/ -3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 
/* 验证非零的正整数:*/ ^\+?[1-9][0-9]*$ 
/* 验证非零的负整数:*/ ^\-[1-9][0-9]*$ 
/* 验证非负整数(正整数*/  + 0^\d+$ 
/* 验证非正整数(负整数*/  + 0^((-\d+)|(0+))$ 
/* 验证长度为3的字符:*/ ^.{3}$ 
/* 验证由26个英文字母组成的字符串:*/ ^[A-Za-z]+$ 
/* 验证由26个大写英文字母组成的字符串:*/ ^[A-Z]+$ 
/* 验证由26个小写英文字母组成的字符串:*/ ^[a-z]+$ 
/* 验证由数字和26个英文字母组成的字符串:*/ ^[A-Za-z0-9]+$ 
/* 验证由数字、26个英文字母或者下划线组成的字符串:*/ ^\w+$ 
/* 验证用户密码*/ :^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。 
/* 验证是否含有*/  ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+ 
/* 验证汉字:*/ ^[\u4e00-\u9fa5],{0,}$ 
/* 验证身份证号(15位或18位数字):*/ ^\d{15}|\d{}18$ 
/* 验证一年的12个月:*/ ^(0?[1-9]|1[0-2])$ 正确格式为:“01-09”和“1”“12/* 验证一个月的31天:*/ ^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:0109131/* 整数:*/ ^-?\d+$ 
/* 非负浮点数(正浮点数*/  + 0):^\d+(\.\d+)?$ 
/* 正浮点数*/  ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 
/* 非正浮点数(负浮点数*/  + 0^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 
/* 负浮点数*/  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 
/* 浮点数*/  ^(-?\d+)(\.\d+)?$

详解

1, 正则方法

	// ①, 替换 replace 
		// 把字符串 '123' 中的 '1' 替换为 '2'
			'123'.replace(/1/,"2");// '223'
		// 多个替换 把字符串 '123' 中的 '1' 替换为 '2', '3' 替换为 '4'
			123'.replace(/1/,"2").replace(/3/,"4");// '224'
	// ②, 判断 test
		// 第一位是否数字
			/[0-9]/.test('23')  或者  /^[0-9]/.test('23')
		// 结尾是否数字
			/[0-9]$/.test('23')
		// 整体是否数字
			/^[0-9]+$/.test('23')// 中间 '+' 表示至少有一位数字
	// ③, 查找 match
		// 把字符串中 <b>单个数字</b> 找出来并分割成数组
		'1abcd12----123'.match(/[1-9]/g)// ['1', '1', '2', '1', '2', '3']
		// 把字符串中所有的 数字 查找出来并分割成数组
		'1abcd12....123----1234'.match(/[1-9]+/g)//  ['1', '12', '123', '1234']
		// 把字符串中所有的 字母 查找出来并分割成数组
		'a1234aB....abC----Abcd'.match(/[a-zA-Z]+/g)//  ['a', 'aB', 'abC', 'Abcd']
	// split 不做解释

2, 正则判断和替换

// 判断
	// ①, 单字符匹配 (最简单的正则匹配)
		/1/.test('1') // 判断字符串中是否包含 '1' true
		/123/.test('123') // 判断字符串中是否包含 '123' true
		/*
			同理 /abc/.test('abc')  /文字/.test('文字')  /.../.test('...') 均可使用
				tips: 使用特殊字符的时候需要加转义字符 \
					例如: /\/\/\//.test('///') // 判断字符串中是否含有'///'
		*/
	// ②, 常用字符串判断
		// 数字, 且不为空
			/^[0-9]+$/.test('23') // true
		// 字母, 且不为空
			/^[a-zA-Z]+$/.test('ABCabc')// true
		// 字母, 小写, 且不为空
			/^[a-z]+$/.test('abc')// true
		// 字母, 大写, 且不为空
			/^[A-Z]+$/.test('ABC')// true
// 替换
	// ①, 常用字符串替换
		/* 整体替换 字符串中只要出现与正则匹配到的字符, 立即替换 */
			// 数字, 替换为 ""
				'23'.replace(/[0-9]/g,"") // ""
			// 字母, 替换为 ""
				'abcdABCD'.replace(/[a-zA-Z]/g,"") // ""
			// 字母, 小写, 替换为 ""
				'abcd'.replace(/[a-z]/g,"") // ""
			// 字母, 大写, 替换为 ""
				'ABC'.replace(/[A-Z]/g,"") // ""
		/* 小部分替换 ( 把字符串中 前两次 出现的数字替换为 '-' )*/
			var i = 0;
			'123456789'.replace(/[1-9]/g, a=> { return (i++ < 2) ? "-" : a; }) // --3456789
// 查找
	// ①, 字符 个数 查找 ( 学会这个细节即可解锁许多骚操作 )
		// 0 个 或 1 个 '?'
			'12abcd23'.match(/[1-9]?/g)// ['1', '2', '', '', '', '', '2', '3', '']
		// 0 个 或 多 个 '*'
			'12abcd23'.match(/[1-9]*/g)// ['12', '', '', '', '', '23', '']
		// 多 个 '+'
			'12abcd23'.match(/[1-9]+/g)// ['12', '23']
		// n 个 在下方例子中 n=2 , '{}'
		  //'12abcd23'.match(/[1-9]{n}/g) // n = 2
			'12abcd23'.match(/[1-9]{2}/g)// ['12', '23']
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐