10分钟解决90%程序员的痛点-正则表达式-学习笔记

正则表达式(Regular Expression)

简称RE/正则,使用单个字符串来描述、匹配一系列符合某个语法规则的字符串、再前端技术应用广泛。本篇Blog以JS代码进行演示

定义语法

第一种创建正则对象的方法(建议使用)

        function valid() {
            /*
            ^在正则中表示起始符号
            $在正则中表示结束符号
            reg表示正则对象
             */
            var reg = /^[a]$/ ;
            alert(typeof reg)
        }
			/*输出结果为 Object */

第二种创建正则对象的方法

        function valid() {
            /*
            ^在正则中表示起始符号
            $在正则中表示结束符号
            reg表示正则对象
             */
            var reg = new RegExp('^[a]$') ;
            alert(typeof reg)
        }
			/*输出结果为 Object */

正则表达式的使用

之后所有操作代码都是基于

 var reg = new RegExp('^[a]$'); /*之后所有操作都是基于本句改动*/
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>REGREX</title>
    <script type="text/javascript">
        function valid() {
            /*
            ^在正则中表示起始符号
            $在正则中表示结束符号
            reg表示正则对象
             */
            var reg = new RegExp('^[a]$');

            /*
            * getElementById() 方法可返回对拥有指定 ID 的第一个对象的引用
            * 后面加.value取得引用的值
            * */
            var uname = document.getElementById('username').value;

            /*
            * 如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否				则返回 false。
            * */
            if(reg.test(uname)){
                alert("合法")  ;
            }else{
                alert("不合法") ;
            }
        }
    </script>
</head>


<body>
		用户名:<input type="text" name="username" id="username">
        <input  value="点击" type="button" onclick="valid()">
</body>
</html>

正则表达式的匹配

字符类匹配

[abc] a、b 或 c 中 一位

[^abc] 非a、b 或 c 中 一位

[a-zA-Z] a 到 z A 到 Z,两头的字母包括在内

var reg = new RegExp('^[a-zA-Z]$');
var reg = new RegExp('^[a-zA-Z0-9]$');
var reg = new RegExp('^[a-zA-Z0-9_]$');

ab与[ab]的区别

正则ab:能通过校验的只有ab

[ab]:能通过校验的有a或b

在单个字符的情况下,ab与[ab]一样

元字符匹配

此处默认都是一位字符,相当于我们为我们上面做的操作的一个封装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WEr56ur-1573540572385)(C:\Users\JunSIr\AppData\Roaming\Typora\typora-user-images\image-20191111225806117.png)]

  1. \s :space键或tab键

转义问题

var reg = /^\w$/ ; 

/*以下创建法需要使用加一杠来进行转义,这是我之前建议用第一种创建法的原因*/




数量词匹配

  • ? 一次或一次也没有
  • * 零次或多次
  • + 一次或多次
  • {n} 恰好 n 次
  • {n,} 至少 n 次
  • {n,m} 至少 n 次,但是不超过 m 次
            var reg = /^a?$/ ;
            var reg = /^a*$/ ;
            var reg = /^a+$/ ;
            var reg = /^a{2}$/ ;
            var reg = /^a{2,}$/ ;
            var reg = /^a{2,4}$/ ;

字符转义

使用场景

需匹配元字符本身,跟正则语法产生冲突如’*‘、‘\’

如何使用

在需匹配字符前加上斜杠表示转义

  var reg = /^//$/ ; //表示匹配‘\’符

注意

在[]中使用元字符,不需要转义(除了’[]'本身)

 var reg = /^[.]$/ ; 

应用-电话号码匹配

学了这么多,我们也是时候来应用一下了。

需求:匹配(010)88886666,或022-22334455,或02912345678三种格式的电话号码

var reg = /^(\(\d{3}\)\d{8})|(\d{3}-\d{8})|(0\d{10})$/ ;
/*使用或字符|需要加括号*/

分组

我已经提过如何重复单个字符(如d{n}),这时候如果我们想重复字符串,就需要用到分组:

用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作

(){}

常用正则表达式

在大部分开发场景中,并不需要我们去手写正则,因为已经有前辈帮我们写好了,我们只需要去搜索对应场景的正则表达式就好了

检验数字的表达式

1 数字:^[0-9]$
2 n位的数字:^\d{n}$
3 至少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零或非零开头的数字:^(0|1-9)$
6 非零开头的最多带两位小数的数字:^(1-9*)+(.[0-9]{1,2})?$
7 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$
8 正数、负数、和小数:^(-|+)?\d+(.\d+)?$
9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
11 非零的正整数:^[1-9]\d$ 或 ^(1-9){1,3}$ 或 ^+?1-9*$
12 非零的负整数:^\-[1-9][0-9] $ 或 ^-[1-9]\d$
13 非负整数:^\d+$ 或 ^[1-9]\d|0$
14 非正整数:^-[1-9]\d|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$
16 非正浮点数:

^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$

17 正浮点数:^[1-9]\d.\d|0.\d[1-9]\d$
18 负浮点数:^-([1-9]\d.\d|0.\d[1-9]\d)$
19 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$

校验字符的表达式

1 汉字:^[\u4e00-\u9fa5]{0,}$
2 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3 长度为3-20的所有字符:^.{3,20}$
4 由26个英文字母组成的字符串:^[A-Za-z]+$
5 由26个大写英文字母组成的字符串:^[A-Z]+$
6 由26个小写英文字母组成的字符串:^[a-z]+$
7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、数字但不包括下划线等符号^[\u4E00-\u9FA5A-Za-z0-9]+$
11 可以输入含有^%&’,;=? " 等 字 符 : ‘ "等字符:`%&',;=? "\x22+12 禁止输入含有~“”的字符:~\x22+`

特殊需求表达式

1 Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$
2 InternetURL:^http://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$
3 手机号码:

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
4 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
5 身份证号(15位、18位数字):^\d{15}|\d{18}$
6 短身份证号码(数字、字母x结尾):

^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
7 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^a-zA-Z{4,15}$
8 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):

^[a-zA-Z]\w{5,17}$

9 日期格式:^\d{4}-\d{1,2}-\d{1,2}
10 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
11 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值