js 正则
最新笔记正则笔记.txt
正则就是对字符串进行处理,过滤筛选出我们需要的指定的字符串,这样增加了用户体验也减轻了服务器
的负担。
创建正则方法一:(代码有点冗余)
var box=new RegExp('box','ig');
如果使用此方法遇到\还需要多次转义:new RegExp(“\\s”,’ig’) 相当于 /\s/ig
创建正则方法二:(推荐使用)
var box=/box/ig
遇到字符串需要拼接可以这么使用要用到eval:
var str='aa'; console.log( eval('/^'+str+'[0-9]$/').test('aa4') );
(可以把创建正则理解为创建一个规则,一段字符串经过这个规则过滤后就是我们需要的内容)
test() //匹配字符串 返回的是布尔值
var box=new RegExp('Box','i'); //i 不区分大小写 var str='box'; alert(box.test(str)); //true 可以一句话写完 alert(/Box/i.test('box')); 简单的了解正则的作用 var box =new RegExp('Box','i'); var str='this is box'; alert(box.test(str)); //检查这段字符串中是否含有 模式中的正则。
exec() //匹配字符串 返回数组
var box =new RegExp('Box','i'); var str='this is box'; alert(box.exec(str)); //存在就返回 数组的值 没有就返回null
String对象提供 4个正则表达式的方法
match() //把所有匹配到的字符串组合成数组,记得要开启g全局模式
'this is box,that is box'.match(new RegExp('Box','ig')) //["box", "box"]
replace() //替换字符串
'this is box,that is box'.replace(new RegExp('Box','ig'),'tom') // 'this is tom,that is tom'
search() //返回第一个匹配到的位置 索引从0开始 无需开启 正则无需开启g全局模式,找不到返回-1
'this is box,that is Box'.search(new RegExp('Box')) // 20 索引从0开始Box在第20个位置
split()
———————————————————
RegExp对象的静态属性
var box=/google/i;
var str=’this is a google’;
box.test(str); //*必须要执行一下,静态属性才有校
alert(RegExp.input); // this is a google

获取控制
. 点 // 可以匹配任意字符串,必须要有不能为0个
var box=/g.ogle/; var str='g2ogle'; alert(box.test(str)); //true
* // 可以匹配 0个 1个 或者 多个
var box=/go*ogle/; //*的前面是o ,就对前面的o起作用 var str='gogle'; var str='google'; var str='gooooooogle';
+ // 至少1个 或者 多个
? // 0个 或者 1个
{}允许重复的个数 // 重复匹配指定的范围
var box=/go{2,4}gle/; // o的数量只能是 2个到4个之间 可以是2个或者4个 var box=/go{3}gle/; //只能3个o var box=/go{3,}gle/; //至少3个o
[]允许出现的范围 // 26个字母只能任意匹配 一个,默认是区分大小写的如果不想就开启i
var box=/[a-z]oogle/; //26个字母任意匹配一个 var box=/[0-9]oogle/; //匹配0到9一个数字
注意一个例子:
var box=/[0-9]oogle/;
var str=’444444444oogle’; //*这里也一样匹配成功因为匹配的是后面6位,不管是后6位还是前6位正则自动去寻找能匹配成功的一段字符串中的某一小段
alert(box.test(str)); //true
[a-zA-Z0-9] 复合 //可以匹配到a-z A-Z 0-9任意一个
| //或
() // 多结构,一般和|配合使用
var box=/(c|b|e)/ig; var str='this is a gogle'; console.log(box.test(str)) //可以匹配到e 注意:/(0-9)/ig 这个意思是匹配'0-9'的字符串
^ 两种用法
^ // 非 ,通常和[]配合使用 var box=/[^0-9]oogle/; //非 0到9的 任意一个字符 str.replace(/[^\d\.\,]/ig,'') //除了数字和,和. 其他的都替换为空格 ^ //强制首匹配 var box=/^[0-9]oogle/; var str='444444444oogle'; alert(box.test(str)); //false 这里就从头开始匹配了 位数一一对应
$ //强制尾匹配
var box=/google$/; var str='fadf3w3fsdfgoogle'; //字符串的结尾必须是google才能匹配
\ //转义
/\.|\\/ig //匹配.或者\ 这两个字符串
?:
例如
industr(?:y|ies) 等同于 industry|industries
?=
/aa(?=95|2000)/ig.test(e.value) 只能匹配到 ‘aa95’,’aa2000’中的aa,以外的都不行,如果’aa2001’就不能匹配到里面的aa
?!
跟?=相反,只要不是’aa95′,’aa2000’都可以匹配,例如’fdfs23aa’,’$%^&aa&&’都可以匹配里面的aa
?<=
跟?=类似,最好理解是用/(?=95|2000)aa/ig 来进行匹配,发现不会成功。但是使用以下方法就成功
/(?<=95|2000)aa/ig.test(e.value),能匹配”95aa”中的”aa”,但是不能匹配”96aa”中的”aa”
可以组合使用例如
var box=/g.?ogle/; // 意思是字符串 可以放0个或1个任意的字符串
var box = /[a-z0-9]+/; var str='fa8sd9f8s09df8sd90f'; // true 只要是数字和字母组合成的都能匹配成功
/^(?:\s|(.+\s))?problem_tip(?:\s|(\s.+))?$/ig //除了…只能,前后只能匹配空格,并且可以是0个或者多个空格
\w // [a-zA-Z0-9_]
\W // [^a-zA-Z0-9_]
\d // [0-9]
\D // [^0-9]
密码正则:
能匹配的组合为:数字+字母,数字+特殊字符,字母+特殊字符,数字+字母+特殊字符组合,而且不能是纯数字,纯字母,纯特殊字符
^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,20}$
如果要限定特殊字符,例如,特殊字符的范围为 !#$%^&* ,那么可以这么改
^(?![\d]+$)(?![a-zA-Z]+$)(?![!#$%^&*]+$)[\da-zA-Z!#$%^&*]{6,20}$
正则 密码 正则密码 数字字母组合
if (pwd == null || pwd == "") { regTip.tupwd.show().html("密码不能为空"); return false; }else if (pwd.length < 6 || pwd.length > 18) { regTip.tupwd.show().html("密码长度不对"); return false; }else if ( !(/^(?=.*[0-9])(?=.*[a-zA-Z])(.{6,})$/ig.test(pwd)) ) { regTip.tupwd.show().html("请输入6-18位数字+字母组合密码"); return false; }
正则 输入金额,例如类似这样格式: 12345.99
<input type="text" onkeyup="fn.call(this)">
function fn(){ if( !(/^([1-9][0-9]*\.?[0-9]{0,2})$/ig.test(this.value)) ){ this.value=(this.value).replace(/[^0-9/.]|^[^1-9]/ig,''); //将开头为0或者非数字的字符串都替换为空 if( !(!(this.value.match(/\./ig)) && typeof((this.value.match(/\./ig)))!="undefined" && (this.value.match(/\./ig))!=0) ){ //这里是防止匹配不到正则是返回null而报错,做了防止报错处理,即使不要这判断效果还在 if( this.value.match(/\./ig).length>1 ){ //如果之前已经输入了小数点,后面就无法继续输入小数点。(但如果转牛角尖把光标移动前面在继续输入还是可以输的) this.value=(this.value).replace(/\.$/ig,'') }else if( this.value.split('.')[1].length>2 ){ this.value= Math.floor(this.value*100)/100 } } } }
https://sdeno.com/wp-content/uploads/2018/08/test.html