2018-07-12

正则表达式 课时一:

正则
1.含义


规定字符出现规律的规则

2.声明一个正则


var reg=//;
var reg=new RegExp();

3.字符集


规定一位字符可以可以出现的备选列表   []
注:字符集只匹配一位
[0-9]   一位数字
[A-Z]   一位大写字母
[a-z]   一位小写字母
[a-zA-Z]    一位字母
[^]     除了

4.预定义字符集


\d   查找数字字符 \D  查找非数字字符
\s   查找空白字符 \S  查找非空白字符
\w   查找单词字符 \W  查找非单词字符

5.量词


规定数量限制的词
{m,n}   最少出现m次,最多n次
{m,}    最少出现m次,最多不限
{m}     必须出现m次
        
没有数量限制的
?   可有可无,最多一次
*   可有可无,多了不限
+   至少一次,多了不限

6.分组和选择


分组:();
选择:|;

对象:Array object Date Math RegExp

注册实例

HTML代码如下

   <div class="main">
        <div class="header">
            <img src="img/timg.gif" />
        </div>
        <div class="body">
            <ul>
                <li><span>账号:</span><input type="text" name="ipn" id="ipn" value="123456" placeholder="请输入密码" /></li>
                <li class="li_p">
                    <p id="text"></p>
                </li>
                <li><span>密码:</span><input type="password" name="ipn1" id="ipn1" value="" placeholder="请密码" /></li>
                <li class="li_p">
                    <p id="text1"></p>
                </li>
                <li><span>确认密码:</span><input type="password" name="ipn2" id="ipn2" value="" placeholder="确认密码" /></li>
                <li class="li_p">
                    <p id="text2"></p>
                </li>
                <li><span>手机号:</span><input type="text" name="ipn3" id="ipn3" value="" placeholder="请输入手机号" /><button class="btng">获取验证码</button></li>
                <li class="li_p">
                    <p id="text3"></p>
                </li>
                <li><span>验证码:</span><input type="text" name="ipn4" id="ipn4" value="" placeholder="请输入四位验证码" /></li>
                <li class="li_p">
                    <p id="text4"></p>
                </li>
            </ul>
        </div>
        <hr />
        <div class="foot">
            <ul>
                <li><input type="checkbox" checked="checked" name="" id="" value="" />我同意成为中国人民
                    <a href="#">《中国人民保护法》</a>
                </li>
                <li><button id="btn">完成注册</button></li>
            </ul>
        </div>
    </div>
    <div class="box">
        <div class="cent">
            <p>内容</p>
            <h1 id="hy"></h1>
            <h1 class="f">郭子豪</h1>
        </div>
    </div>

js代码如下

    var ipn = document.getElementById('ipn');
    var txt = document.getElementById('text');
    ipn.onfocus = function() {
    txt.innerHTML = '使用6-18位字母数字、支持中文';
    }
    ipn.onblur = function() {
            var reg = /^[\u4e00-\u9fa5a-zA-Z0-9]{6,12}$/;
        var result = reg.test(ipn.value);
        if(result == true) {
            txt.innerHTML = '通过';
        } else {
            txt.innerHTML = '格式错误';
        }
            }
    var ipn1 = document.getElementById('ipn1');
    var txt1 = document.getElementById('text1');
    ipn1.onfocus = function() {
        txt1.innerHTML = '使用6-18位字母数字';
    }
    ipn1.onblur = function() {
        var reg1 = /^[A-Za-z0-9]{6,12}$/;
        var result1 = reg1.test(ipn1.value);
        if(result1 == true) {
            txt1.innerHTML = '通过';
        } else {
            txt1.innerHTML = '格式错误';
        }
    }
    var ipn2 = document.getElementById('ipn2');
    var txt2 = document.getElementById('text2');
    ipn2.onfocus = function() {
    txt2.innerHTML = '请再次输入密码';
    }
    ipn2.onblur = function() {
        if(ipn1.value == ipn2.value) {
            txt2.innerHTML = '验证通过';
        } else {
            txt2.innerHTML = '两次密码输入不一致';
        }
    }
    var ipn3 = document.getElementById('ipn3');
    var txt3 = document.getElementById('text3');
    ipn3.onfocus = function() {
        txt3.innerHTML = '请输入11位手机号';
    }
    ipn3.onblur = function() {
        var reg3 = /^1[356789]\d{9}$/;
        var result3 = reg3.test(ipn3.value);
        if(result3 == true) {
            txt3.innerHTML = '输入正确';
        } else {
            txt3.innerHTML = '手机号格式错误';
        }
    }
    var btng = document.querySelector('.btng');
    var a = Math.floor(Math.random() * (9999 - 1000 + 1) + 1000);
    console.log(a);
    btng.onclick = function() {
        if(btng.innerHTML == '获取验证码') {
            btng.innerHTML = "60秒之后获取";
            alert('您的验证码:' + a);
            var i = 59;
            var xh = setInterval(function() {
                btng.innerHTML = i + "秒之后获取"
                i--;
                if(i == 0) {
                    clearInterval(xh);
                    btng.innerHTML = "获取验证码"
                }
            }, 1000);
        }
    }
    var btn = document.getElementById('btn');
    var ipn4 = document.getElementById('ipn4');
    var box = document.querySelector('.box')
    btn.onclick = function() {
        if(ipn4.value == a) {
            alert('验证通过,正在跳转....');
            box.style.display = 'block';
        } else {
            alert('验证失败,重新尝试')
        }
    }
    var hy = document.getElementById('hy');
    var ip = document.querySelector('#ipn');
    console.log(ip.value)
    hy.innerHTML = '欢迎回来' + ip.value;

下拉框左右移动实例

HTML代码

<select name="first" size="10" id="first" multiple="multiple">
    <option>三星</option>
    <option>小米</option>
    <option>魅族</option>
    <option>红米</option>
    <option>苹果</option>
    <option>联想</option>
    <option>乐视</option>
    <option>8848</option>
    <option>vivo</option>
    <option>oppo</option>
</select>
<div class="select_move_2">
    <button onclick="move(this)">&gt;</button>
    <button onclick="move(this)">&gt;&gt;</button>
    <button onclick="move(this)">&lt;</button>
    <button onclick="move(this)">&lt;&lt;</button>
</div>
<select size="10" id="secend" multiple="multiple"></select>

js代码


var sele = [],
        sec = [];
    sele = first.innerHTML.slice(12, -13).split(/<\/option>\s*<option>/);
    console.log(sele)
    function move(btn) {
        switch(btn.innerHTML) {
            case '&gt;&gt;':
                sec = sec.concat(sele);
                sele = [];
                break;
            case '&lt;&lt;':
                sele = sele.concat(sec);
                sec = [];
                break;
            case '&gt;':
                var opt = document.querySelectorAll('#first>option');
                for(var i = 0; i < opt.length; i++) {
                    if(opt[i].selected) {
                        sec.push(sele.splice(i, 1));
                        sec.sort();
                    }
                }
                break;
            case '&lt;':
                var opt1 = document.querySelectorAll('#secend>option');
                for(var i = 0; i < opt1.length; i++) {
                    if(opt1[i].selected) {
                        sele.push(sec.splice(i, 1));
                        sele.sort();
                    }
                }
             break;
        }
        update(sele, first);
        update(sec, secend);
    }
    function update(arr, sel) {
        sel.innerHTML = '<option>' + arr.join('</option><option>') + '</option>';
    }

正则字符串

API

toUpperCase     转大写
toLowerCase     转小写
slice(starti,endi+1)
concat();
substring();
    1)不支持负数
substr();
indexof();  查找一个关键词出现的位置    找不到返回-1
lastindexof();  查找上一个关键词出现的位置   找不到返回-1

字符串中的正则API

1、search();     查找符合正则的字符   找不到返回-1
2、match();      获得所有正则匹配的关键词
    1)g表示匹配全部
    2)i表示忽略大小写
3、replace();    替换
4、split();      切割

字符串中的正则API练习

//  获得正则匹配值
    var str = 'good good study,day day up1';
    var strs=str.match(/d/gi);
    console.log(strs)
//  替换
    var str1 = 'good good study,day day up2';
    var strs1=str1.replace(/d/gi,'b');
    console.log(strs1)
//  切割
    var str2 = 'good,good,study,day,day,up3';
    var strs2=str2.split(/,/);
    console.log(strs2)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容