新手入门:JS常用正则表达式及其应用实例

为了便于快速上手,我们这里采用简单通俗的语言,并且只介绍简单的正则表达式,深入的内容还得进一步学习…

元字符

比如^ $ \d \w \s等参与构成正则表达式的基本字符
(可以用 转义字符 辅助记忆)

  1. \d 数字
  2. \w 数字或字母或下划线或汉字(是word的缩写,匹配单词)
  3. \s 匹配任意空格(包括换行等空格)
  4. ^放在[]外面(^[…])表示以…开头;放[]里面([^…]表示 非)
  5. $放在[]末尾([…]$),表示以[…]结尾
    (形为/^[][][]$/的结构叫做严格模式)

限定符

比如{} [] + * ? |等

  1. []限定内容:/[a-zA-Z0-9]/表示任意字母和数字;/[0-9][a-z]/表示 一段数字+一段字母…以此类推;(注意表达100-199的方式是/[1][0-9][0-9]/,思考一下为什么不能是/[100-199]/)
  2. {}限定数量:/[…]{n,m}/即限定[…]中的内容出现过n~m(均取闭区间)次;且可以用{n,}表示至少出现过n次;但是没有{,m};
  3. +等价于{1,},至少出现过一次
  4. ?等价于{0,1},出现过0或1次
  5. *等价于{0,},出现过任意次
  6. | 或者

实例:

当输入内容格式不符合规范时:
错误身份证格式
错误身份证格式
当符合规范时:
正确身份证格式

关键JS代码

	//第一步:选中输入框 和 警告(就是那个红色的!)DOM 方面后面进行操作
	var input = document.getElementsByTagName('input');
    var warning = document.getElementsByClassName('warning');
	
	//第二步:创建一个数组,存放正则表达式
    var regex = [];
    //身份证格式验证
    regex[0] = /^([1-9][0-9]{14})$|^([1-9][0-9]{16}[0-9Xx])$/;
    //邮箱格式验证
    regex[1] = /^[0-9A-Za-z_.-]+[@][0-9A-Za-z-._]+([.][a-zA-Z]+){1,2}$/;
	
	//第三步:对每个input进行事件绑定,
	for(var i = 0; i < input.length; i ++){
       (function(i){
            input[i].onblur = input[i].onfocus = function(){
            //用正则表达式的test方法验证字符串是否匹配
                if(!regex[i].test(input[i].value)){
                //用display做这个效果要更好一点
                    warning[i].style.backgroundColor = "red";
                }
                else{
                    warning[i].style.backgroundColor = "white";
                }
            }
        }(i))        
    }
	

第三步要是不太懂的话需要先去学习闭包的知识。

解释

regex[0] = /^([1-9][0-9]{14})$|^([1-9][0-9]{16}[0-9Xx])$/;

采用了严格模式(加上了^和$,限定了以…开头,以…结尾)。
若不采用严格模式,由于身份证是15位或18位,那么100位的数字串的子串中也有 符合身份证格式的,这会使得100位的这个数字串仍然匹配。
采用严格模式明确了开头结尾,使得长度也被限定。

这个正则表达式内容的解读为:
(以数字1-9开头,然后是14位数字0-9,结束)或者
(以数字1-9开头,然后是16位数字0-9,再是0-9或X或x,结束)

regex[1] = /^[0-9A-Za-z_.-]+[@][0-9A-Za-z-._]+([.][a-zA-Z]+){1,2}$/;

这个正则表达式内容的解读为:
以 多个(+表示多个) 非特殊字符(数字 字母 和 .-,注意.-不算特殊字符)开头
然后是一个@,接着又是 多个非特殊字符
最后 以(.加上多个字母) 出现1~2次结束

(为什么是1-2次?据说是存在.com.cn这样拥有二级域名的邮箱…)

完整参考代码

(很多没完善,求大佬别喷)

<!DOCTYPE html>
<html lang="en">
<style> 
    #list{
        position: relative;
        left: 50%;
        transform: translateX(-50%);

        text-align: center;
        width: 500px;
        height: 350px;
        border:2px solid black;
    }
    ul{
        text-align: center;

    }
    li{
        width: 80%;
        height: 30px;
        line-height: 30px;
        margin: 20px;
        list-style-type: none;
    }
    li div{
        display: inline;
        float: left;
    }
    li input{
        float: right;
        width: calc(100%-50px);
        display: inline;
        
    }
    .warning{
        text-align: center;
        margin-top: 5px;
        width: 25px;
        height: 25px;
        border-radius: 100%;
        background-color: red;
        float: right;
        color: white;
        margin-left: 5px;
        /* display: none; */
                
    }

    input{
        width: 200px;
        height: 30px;
        border: 2px gray solid;
        border-radius: 3px;
        display: block;
    }   
    li::after{
        clear: both;
    }


</style>
<head>
    <script src="../JS/basic.js"></script>
    <!-- <meta http-equiv="refresh" content="3"> -->
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="list">
        <header>正则表达式验证</header>
        <ul>
            <li>
                <div class="intro">身份证</div>
                <div class="warning">!</div>
                <input type="text" placeholder="请输入身份证号">
                
            </li>
            <li>
                <div class="intro">邮箱</div>
                <div class="warning">!</div>
                <input type="text" placeholder="请输入邮箱">
            </li>
            <li>
                <div class="intro">123</div>
                <div class="warning">!</div>
                <input type="text" placeholder="请输入身份证号">
            </li>
            <li>
                <div class="intro">123</div>
                <div class="warning">!</div>
                <input type="text" placeholder="请输入身份证号">
            </li>
            <li>
                <div class="intro">123</div>
                <div class="warning">!</div>
                <input type="text" placeholder="请输入身份证号">
            </li>
        </ul>
        <button>提交</button>
    </div>
 

</body>
<script>  
    var button = document.getElementsByTagName('button')[0];
    
    var input = document.getElementsByTagName('input');
    var warning = document.getElementsByClassName('warning');
   
    var isAllOK = false;
    
    button.onclick = function(){
        alert("提交成功");
    };

    var regex = [];
    regex[0] = /^([1-9][0-9]{14})$|^([1-9][0-9]{16}[0-9Xx])$/;
    regex[1] = /^[0-9A-Za-z_.-]+[@][0-9A-Za-z-._]+([.][a-zA-Z]+){1,2}$/;
  
    for(var i = 0; i < input.length; i ++){
        (function(i){
            input[i].onblur = input[i].onfocus = function(){
                if(!regex[i].test(input[i].value)){
                    warning[i].style.backgroundColor = "red";
                }
                else{
                    warning[i].style.backgroundColor = "white";
                }
            }
        }(i))        
    }

    var test1 = "1a2b3cddd";
    var regTest = /[0-9][a-z]/;
    var regTest2 = /[0-9][a-z]/g;
    console.log(test1.match(regTest));
    console.log(test1.match(regTest2)); 

</script>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碳苯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值