前言
正则表达式由我们自己来书写"规则",专门用来检验字符串是否符合"规则"使用的,
例如:手机号、账号、密码、游戏名等检验字符串是否合法。
废话不多说,直接上干货!
创建一个正则表达式
想制定"规则",必须要按照人家要求的方式来制定;
把一些字符和符号写在//中间的东西,叫做正则表达式,比如/abcdefg/;
创建正则表达式有两个方式:字面量和构造函数。
+ 字面量创建
var reg = /abcdefg/
+ 构造函数创建
var reg = new RegExp(‘abcdefg’)
正则表达式里面的符号
元字符
.:匹配非换行的任意字符
\ :转译符号,把有意义的符号转换成没有意义的字符,把没有意义的字符转换成有意义的符号
\s :匹配空白字符(空格/制表符/…)
\S :匹配非空白字符
\d :匹配数字
\D:匹配非数字
\w:匹配字母数字下划线
\W :匹配非字符数字下划线
限定符
* :前一个内容重复至少0次,也就是可以0-正无穷次
+ :前一个内容重复至少1次,也就是可以1-正无穷次
?:前一个内容重复0次或1次
{n}:前一个内容出现n次
{n,}:前一个内容至少出现n次,也就是出现n-正无穷次
{n,m}:前一个内容出现n到m次
限定词可以配合元字符使用
边界符
^:表示开头
$:表示结尾
^ $:表示精确匹配
边界符是限定字符的开始和结尾的
特殊符号
():限定一组元素
[]:字符集合,表示写在[]里面的任意一个都行
[ ^ ]:反字符集合,表示写在[]里面之外的任何一个都行
-:范围,比如a-z表示从字符a到字符z都可以
|:或,正则里面的或s|b表示字符s或者字符b都可以
举个例子
上传自己的靓照
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<label for="photo">请上传你的靓照</label>
<input type="file" id="photo">
<script>
var fileInp = document.getElementById('photo');
fileInp.onchange = function(){
//文件名
var filename = this.files[0].name;
//文件名必须是以:.jpg,.gif,.png,.jpeg,.webp
var reg = /\.(jpg|gif|png|jpeg|webp)$/;
if(reg.test(filename)){
//符合要求
alert('文件格式正确,可以上传')
}else{
alert('文件后缀必须是.jpg,.gif,.png,.jpeg,.webp,请重新上传')
}
}
</script>
</body>
</html>
常用的正则表达式
//1.只能用数字开头,长度在6--18位之间
var reg = /^\d{6,18}/;
console.log(reg.test("a123451"))
//2.以字母开头,数字结尾,中间任意一个字符
var reg = /^[a-zA-Z]+.+\d$/
console.log(reg.test("a1ddw.,ds@1"))
//3.密码不能少于6位的字符
var reg = /.{6,}/
console.log(reg.test("a1ddw"))
//4.以a开头 b字符至少出现2个,至多出现6个
var reg = /^a[^b]*b{2,6}$/
console.log(reg.test("a_hdkwjbbbbbb"))
// 5.变量的命名正则表达式(不能用数字开头 由字母、数字、下划线 、$组成)
var reg = /^\D+[a-zA-Z0-9_$]/
console.log(reg.test("b_$bsbbasbb"))
// 6.以010开头的座机号(后面是8位数字)
var reg = /^(010)\d{8}$/
console.log(reg.test("01012345678"))
// 7.手机号以13开头,以8结尾
var reg = /^(13)\d{8}(8)$/
console.log(reg.test("13123456788"))
// 8.密码只能用6个*
var reg = /^\*{6}$/
console.log(reg.test("*****"))
// 9.第一位是数字,第二位是A或a,后面至多出现6个字符
var reg = /^\d(A|a).{0,6}$/
console.log(reg.test("2AXzzds22"))
// 10.第一位是数字,第二位是任意一个字符,后面只能由字母、数字、下划线组成,共8位
var reg = /^\d.[a-zA-Z0-9_]{6}$/
console.log(reg.test("AAXzz_s2"))
// 11.写出中国人姓名正则,2--4个中文
var reg = /^[\u4E00-\u9FA5]{2,4}$/
console.log(reg.test("AAXzz_s2"))
// 12.写一个qq号的正则,至少5位,至多12位数字
var reg = /^\d{5,12}$/
console.log(reg.test("1234211111111"))
// 13.邮编检验 共6位数字 第一位不能是0
var reg = /^[^0]\d{5}$/
console.log(reg.test("123412"))
// 14.检验压缩包,xxx.zip或xxx.rar或xxx.tar 三个格式
var reg = /\.(zip|rar|tar)$/
console.log(reg.test("111.rar"))
//15.电子邮件 (@符号前后使用单词字符即可) 232323@qq.com
var reg = /\d(@)[a-z]{2}\.(com)$/
console.log(reg.test("111@qq.com"))
//16.手机号 1 3|5|8|7
var reg = /^(1)(3|5|8|7)\d{9}$/
console.log(reg.test("15111111111"))
//17.身份证 (18位 考虑最后一位可能为x)
var reg = /^\d{17}(\d|x|X)$/
console.log(reg.test("45212219991027054x"))
//18.账户名只能使用数字字母下划线,不能数字开头,长度在6--18之间
var reg = /^[^\d]{1}\w{5,17}$/
console.log(reg.test("q5111111111"))
下期再见