this 正则

 关于正则,我相信很多小伙伴跟我一样,在接触的时候信心满满,等学完之后会有点醉,(其实还是练得不够多)那么接下来随小编一起来复习一下这个傲娇的正则。 

正则:也叫做规则,让计算机能够读懂人类的规则。 有什么规则呢?

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222184023147.png)

下面小编带大家重新认识认识正则:

 正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,总能帮你一眼识别 ! 

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222184119273.png)

  1、什么是正则,有什么用呢?

正则:也叫做规则,让计算机能够读懂人类的规则;

前端哪些地方用到正则? 常用的有表单验证,或者敏感词过滤;

  2、他有什么规则呢?

正则也是一个系统对象,跟数组、json一样,也有个写法规则

简写  var re=//;  //只写两斜杠,浏览器会认为是注释,所以尽量不要给他为空,注意两斜杠之间不要有引号

全称  var re=new RegExp();  //Reg是正则的简写,Exp是表达式的简写。

注:大部分情况用简写,只有一种情况用全称写法:正则需要传参的时候;全称写法用到\时,需要两个\\,否则是转义字符。

接下来正式介绍一下正则

 <font color = red>一、新建正则的两种方法:</font> 

    方式一:直接量语法

              1、通过new创建正则:var box = new RegExp("hello", "ig");

                2、省略new创建正则:var box = RegExp("hello", "ig");

                3、正则常量赋值:  var box = /hello/ig;

    方式二:创建 RegExp 对象的语法

  var reg = new RegExp(pattern, attributes);

<font color = red>参数说明:</font>

        参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

        参数 attributes 是一个可选的字符串,包含属性 “g”、”i” 和 “m”,分别用于指定全局匹配、区分大小写的匹配和多行匹配。

**<font color = red>二、两者区别在于:</font>**

1.采用直接量语法新建的正则表达式对象在代码编译时就会生成,是平常开发中常用的方式;

2.采用构造函数生成的正则对象要在代码运行时生成。               

**<font color = red>三、正则的方法和修饰符</font>**

  js正则中只有两种方法:test和exec

*<font color = red> 1、test方法(重点记忆)</font>*

                    格式:正则.test(字符串);

                    功能:在字符串中匹配正则是否存在

                    返回值:如果存在返回true; 如果不存在就返回false


```javascript

            var str = "how aRe you";

            var box = /are/i;

            alert(box.test(str));

```

2、exec 方法

                    格式:正则.exec(字符串)

                    功能:在字符串中匹配正则是否存在

                    返回值:如果存在返回一个数组,数组里面存放着匹配的内容

                          如果不存在,返回null


```javascript

              var str = "how aRe you";

                var box = /are/i;

                alert(box.exec(str).length);

```

**<font color = red>3、js正则修饰符</font>**

              修饰符(没有先后顺序)

                        i  忽略大小写

                        g  全局匹配(查找所有匹配而非在找到第一个匹配后停止)

                        m  换行匹配

是不是还想知道更多呢,小编带大家接着往下看~~~

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222170721880.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIxNjUyMA==,size_16,color_FFFFFF,t_70)

   四、正则的字符串函数

<font  color=organege>*字符串方法正则可用哦*</font>

              1.match

                    格式:字符串.match(正则)

                    功能:在字符串中匹配这个正则是否存在

                    返回值:如果存在,返回一个数组,数组放着,匹配到的子串

                          如果不存在,返回null


```javascript

          var str = "how are Are ARE you";

            var box = /arex/ig;

            alert(str.match(box)); //are,Are,ARE

```

              2. search

                    格式:字符串.search(正则)

                    功能:在字符串中,查找正则表达式,第一次出现的位置

                    返回值:如果查找到,返回,查找到的下标

                          查找不到,返回-1

```javascript

            var str = "how ARE are you";

            var box = /are/i;

            alert(str.search(box)); //4

```

              3. replace

                    格式:字符串.replace(正则, newStr);

                    功能:在字符串中找到正则,并且将他替换成新字符串。

                    返回值:替换成功的新字符串

            ***注:此方法在编程生活中较为常用哦***

```javascript

            var str = "how are Are ARE you";

            var box = /are/ig;

            var newStr = str.replace(box, "two");

            alert(newStr); //how two two two you

```

              4. split

                    格式:字符串.split(正则)

                    功能:使用正则对字符串进行字符串分割

                    返回值:分割完的子串组成的数组。

```javascript

            var str = "how are Are ARE you";

            var box = /are/i;

            var arr = str.split(box);

            alert(arr); //how , , , you

```

 五、元字符

 那么什么是元字符呢?   

 通俗的意义来说呢 ,元字符即在正则表达式中有特殊含义的字符。

元字符又分为四大类,下面我们分类详细讲解一下。

 <font  color=red>1.单个数字和字符的元字符</font> 常用)

      匹配单个的任意字符

[范围]  匹配单个范围内的字符

 [0-9]   匹配单个数字0-9

 [a-zA-Z0-9_] 匹配单个的数字、字母下划线

[^范围]        匹配任意一个除括号范围内的字符

 [^0-9]     匹配任意一个非数字字符

 \w         匹配单个的数字、字母下划线  等价于 [a-zA-Z0-9_]

 \W        匹配单个非数字、字母下划线

 \d         匹配单个数字  等价于 [0-9]

 \D         匹配单个非数字  等价于 [^0-9]

<font  color=red> 如: 

      \d{2, 4}/</font> //匹配2到4间的数字.

<font  color=red> /\w{3} \d?/ </font> //匹配三个单字字符和一个任意的数字.

匹配特定字符串

<font  color=red>2.空白字符</font>

<font color = blue>**\s**  匹配任意单个的空白字符</font>

<font color = blue>**\S**  匹配任意单个非空白字符</font>

<font  color=red>3.重复字符  x(任意的单个字符)</font>

 x?     匹配0个或者1个x

 x+   匹配至少一个x字符

 x*   匹配任意个x字符

 x{m,n} 匹配至少m个,最多n个x字符,包括n

<font color = blue>**x{n}**  必须匹配n个x字符</font>

 (xyz)+  小括号括起来的部分是当做单个字符处理

<font  color=red>4.锚字符</font>

<font color = blue>^  行首匹配  必须以这个正则开头</font>

<font color = blue>$  行尾匹配  必须以这个正则结尾</font>

```javascript

var re=/^\s+|\s+$/g;

str.replace(re,"");

```

==用于验证时,通常需要在前后分别加上^和$,以匹配整个待验证字符串;==

<font  color=red>【注】</font>

                    如果需要在正则表达式中用元字符本来的字符含义,必须经过转义。

                            **\.  代表字符.的意思**

                            **\*  代表字符*的意思**

<font size= 5px> 好了,那么到了这里呢,基本概念及语法大家已经可以清楚的了解到了,接下来呢,带大家进行实战演习~ </font>

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222183100842.png)

 牛刀小试一哈,先来写一个简单的邮政编码的验证 

```javascript

var box = /^[1-9]\d{5}$/;

            alert(box.test("100000"));

            alert(box.test("518000"));

            //判断输入以数字1-9开头,结尾以数字5位数结尾的,

            //6位邮政编码的验证


```


  下面加大一点难度,实现一个敏感词过滤的一个效果 

        在我们的生活当中,不乏一些不文明的现象,不光在生活中,我们作为程序猿在网络上也要杜绝这种现象的发生哦,这样才能有一个好的网络风气,那需要我们怎么做呢?


```javascript

<style>

            #txt{width: 400px; height: 300px; border: 1px solid black;}

    </style>

    <script>

            window.onload = function(){

                var oTxt = document.getElementById("txt1");

                var oBtn = document.getElementById("btn1");

                var oTt = document.getElementById("txt");

                //设置敏感词

                var arr = [/tmd/ig, /w靠/ig, /wc/ig];


                //添加点击的事件驱动函数

                oBtn.onclick = function(){

                    var oValue = oTxt.value;

                //通过循环将数组里的每一个正则元素进行忽略大小写,全局匹配

                    for(var i = 0; i < arr.length; i++){

                        oValue = oValue.replace(arr[i], "*"); //找出文本中符合判断敏感词条件的文本,进行替换成 “*”

                    }


                    oTt.innerHTML = oValue; //敏感词被替换成 * 后重新被赋值到文本框中

                }

            }

        </script>

        <body>

        <textarea name="" id="txt1" cols="30" rows="10"></textarea>

        <button id = "btn1" >发布</button>

        <div id = "txt"></div>

    </body>

```

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222185451241.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIxNjUyMA==,size_16,color_FFFFFF,t_70)

 效果图如上 

小伙伴们有没有感觉到小小的成就感呢?

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222185727539.png)

## 最后再安利几个常用的表单验证的例子

1.用户名验证

```javascript

//用户名正则,4到16位(字母,数字,下划线,减号)

var uPattern = /^[a-zA-Z0-9_-]{4,16}$/;

//输出 true

console.log(uPattern.test("caixukun"));

```

2.密码强度验证

```javascript

//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符

var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;

//输出 true

console.log("=="+pPattern.test("caixukunn#"));

```

3.整数正则

```javascript

//正整数正则

var posPattern = /^\d+$/;

//负整数正则

var negPattern = /^-\d+$/;

//整数正则

var intPattern = /^-?\d+$/;

//输出 true

console.log(posPattern.test("42"));

//输出 true

console.log(negPattern.test("-42"));

//输出 true

console.log(intPattern.test("-42"));

```

4.Email正则

```javascript

//Email正则

var ePattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

//输出 true

console.log(ePattern.test(<a href="mailto:99154507@qq.com" rel="external nofollow">99154507@qq.com</a>));

```

5.手机号正则验证

```javascript

//手机号正则

var mPattern = /^1[34578]\d{9}$/;

//输出 true

console.log(mPattern.test("18503623666"));

```

6.身份证正则验证

```javascript

//身份证号(18位)正则

var sfz = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;

//输出 true

console.log(sfz.test("37113519880605371X"));

```

7.qq号正则验证

```javascript

//QQ号正则,5至11位

var qqPattern = /^[1-9][0-9]{4,10}$/;

//输出 true

console.log(qqPattern.test("927184040"));

```

8.微信号正则验证

```javascript

//微信号正则,6至20位,以字母开头,字母,数字,减号,下划线

var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;

//输出 true

console.log(wxPattern.test("caixukun_com"));

```

9.中文正则验证

```javascript

//包含中文正则

var cnPattern = /[\u4E00-\u9FA5]/;

//输出 true

console.log(cnPattern.test("肖战"));

```

好啦,本次小编为大家整理的关于JS正则的相关知识就总结到这里,初次露面,还望大家多多指教,走过路过不要忘记  ~  留下你宝贵的关注哦,梦颜先行谢过小哥哥小姐姐们~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容