做app和做网站相同和区别/广州seo诊断
javascript中正则匹配多个条件, 常用正则匹配
- 正则表达式常用方法
- 实现
- 其他的常用正则匹配
- 详解
注意: 本篇文章是根据在下日常编码过程中逐渐丰富的, 越往后看, 收获越丰富, 收藏起来以后随时回顾
准备工作1, 汉字和unicode码的在线转换网址http://tool.chinaz.com/tools/unicode.aspx2, 正则在线生成地址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']