写在前面
简单说,正则表达式就是用来安全校验的。
写法:
- JS风格:
let re=new RegExp('\\d+', 'g');
- perl风格:
let re=/\d+/g;
一般用第二种
定界符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
- / /
- i:忽略大小写
- g:全局匹配
元字符——[ ]
一个元字符代表一个字
[ 这里是要限制内容 ],例如:0-9,a-z,-,_等
- 任何一个
/a[abc]q/
匹配aaq,abq,acq - 范围
/[a-z]/
匹配a-z
/[a-z0-9]/
匹配a-z和0-9 - 排除
[^a-z]
匹配除了a-z的其他字符
量词——{ }
在正则里面,没有量词,就都是匹配一个
- 不加量词,就是匹配一个
- {n}:n个
/\d{11}/ 匹配11个数字
- {n,m}:m到n个,最少n个最多m个
/\d{5,12}/ 匹配5到12位数字
- {n,}:最少n个,多则不限
- +:等价于{1,} 最少一个,多则不限
- ?:可以没有,有的话,最多一个
/\.jsx?/ 匹配 .js 和 .jsx
有 . 的都要用 \ 转义一下 - :匹配前面的子表达式零次或多次。例如,zo能匹配“z”以及“zoo”。*等价于{0,}。
转义
- \d:指所有数字,等价于[0-9]
- \D:指 [^0-9]
- \w:数字字母下划线,等价于[A-Za-z0-9_]
- \W:等价于[^A-Za-z0-9_]
- \s:指任何空白字符,包括空格、制表符、换页符……等价于[ \f\n\r\t\v]
- \S:指非空白,等价于[^ \f\n\r\t\v]
- .:匹配除“\n”之外的任何单个字符
/a.{5,18}z/ 匹配 a 5-18的任何字符 z
- .|\n:匹配包括“\n”在内的任何字符
修饰符
普通校验中,只要一部分通过就全过,所以我们要用修饰符来限制他的范围
- ^:行首
- $:行尾
-
re=/^[1-9]\d$/
从头到尾限制 -
re=/\.js$/i
忽略大小写 匹配以 .js 结尾的字符串 -
re=/^https?:\/\//
匹配网址
^ 在[]里面,表示非;在[]外面,表示行首
方法
- search:返回第一次出现的位置
- match:返回数组,里面是符合要求的字符串
- replace:替换,返回一个新字符串
- split:切字符串,返回切后的字符串
- test:验证,返回true/false
优先级
当用到 “或|
” 的时候,有优先级()
问题
例如:匹配0~9999
// 或
// 1位 0~9
// 2位 10~99
// 3位 100~999
// 4位 1000~9999
// /\d|[1-9]\d|[1-9]\d\d|[1-9]\d\d\d/
// /\d|[1-9]\d{1,3}/
let re=/^(\d|[1-9]\d{1,3})$/;
匹配QQ
<script>
window.onload=function (){
let oTxt=document.getElementById('txt');
let oBtn=document.getElementById('btn');
oBtn.onclick=function (){
let re=/^[1-9]\d{4,11}$/;
if(re.test(oTxt.value)){
alert('通过');
}else{
alert('不通过');
}
};
};
</script>
<input type="text" id="txt">
<input type="button" value="校验" id="btn">