注意: 本篇文章是根据在下日常编码过程中逐渐丰富的, 越往后看, 收获越丰富, 收藏起来以后随时回顾
准备工作
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)$ 正确格式为:01、09和1、31。
/* 整数:*/ ^-?\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']