前端JS正则校验密码之3种实现方式

简介: 这篇文章展示了三种使用JavaScript正则表达式来校验密码的方法,密码需要满足包含大写字母、小写字母、数字及特殊字符,并在8到16位之间,同时提供了示例代码和实现效果。

匹配8-16位,至少有一个大写字母或小写字母,至少有一个数字,至少有一个特殊字符包括-`=\[\];',.~!@#$%^&*()_+|{}:"?,不过要注意不同语言的转义字符问题。

方式一和方式二实现如下所示:

<!DOCTYPE html>
<html>
<head>
    <title>前端JS正则校验密码</title>
    <style type="text/css">
        *{
    
    margin: 0;padding: 0}
    </style>
</head>
<body>
    <script type="text/javascript">
        /**
         * 匹配8-16位,至少有一个大写字母或小写字母,至少有一个数字,至少有一个特殊字符包括-`=\[\];',.~!@#$%^&*()_+|{}:"?
         *
         * ^是正则表达式匹配字符串开始位置。
         * $是正则表达式匹配字符串结束位置。
         * ()是为了提取匹配的字符串,表达式中有几个()就有几个相应的匹配字符串。
         * []是定义匹配的字符范围,匹配的字符在[]中。
         * {}一般用来表示匹配的长度,比如\s{3} 表示匹配三个空格,\s{1,3}表示匹配一到三个空格。
         */
        var arrayList = new ArrayList();
        arrayList.add("123");
        arrayList.add("aaa");
        arrayList.add("AAA");
        arrayList.add("123a");
        arrayList.add("123A");
        arrayList.add("123789aOa");
        arrayList.add("123789AoA");
        arrayList.add("123789A $");
        arrayList.add("123789a $");
        arrayList.add("123Ao A$");
        arrayList.add("123aO a$");
        arrayList.add("123789A$");
        arrayList.add("123789a$");
        arrayList.add("123AoA$-");
        arrayList.add("123aOa$-");
        arrayList.add("123AoA()$");
        arrayList.add("1234567a");
        arrayList.add("aaabbb&&&");
        arrayList.add("aaabbb&&&1");
        arrayList.add("123761123&&&");
        arrayList.add("           ");
        arrayList.add("    7613&&&");
        arrayList.add("    7613aa&&&");
        arrayList.add("    7613AA&&&");
        arrayList.add("    7613Ss&&&");
        for (var i = arrayList.size() - 1; i >= 0; i--) {
    
    
            // console.log(arrayList.get(i));
            checkAction1(arrayList.get(i));
            checkAction2(arrayList.get(i));
            console.log("\n");

        }        


        /**
         * 前端正则检验密码 - 必须满足5种情况才ture
         * 规则拆分写
         */
        function checkAction1(password){
    
        
            var upperCaseOrlowerCase = /[a-zA-Z]/;// 判断是否有大写或小写
            var number = /[0-9]/;// 判断是否有数字
            var specificSymbol = /[-`=\[\];',.~!@#$%^&*()_+|{}:"?]/;// 判断是否有特殊符号,注意在C#页面中需要两个@@才转义成一个
            var length=/^.{8,16}$/;// 判断是否长度为8-16位
            var space=/^\S+$/;// 判断必须非空格
            var test = upperCaseOrlowerCase.test(password) && specificSymbol.test(password) && number.test(password) && length.test(password) && space.test(password);
            console.log(test+" ----checkAction1---- "+password);// 输出正则匹配结果

        }

        /**
         * 前端正则检验密码
         * 规则合并写
         */
        function checkAction2(password){
            // (?![0-9A-Za-z]+$)意思是不能是纯大写字母的密码,也不能是纯小写字母的密码,也不能是纯数字的密码,也不能是由大写字母和小写字母和数字组合的密码。
            // (?![-`=\[\];',.~!@#$%^&*()_+|{
    
    }:"?]+$)意思是不能是指定的纯特殊字符的密码。
            // (?![0-9-`=\[\];',.~!@#$%^&*()_+|{}:"?]+$)意思是不能是由指定的纯特殊字符和数字组合的密码。
            // (?![A-Za-z-`=\[\];',.~!@#$%^&*()_+|{}:"?]+$)意思是不能是由指定的纯特殊字符和大写字母和小写字母组合的密码。
            // [0-9a-zA-Z-`=\[\];',.~!@#$%^&*()_+|{}:"?]意思是定义字符范围,注意此不包括\s空格字符。
            // {8,16}意思是定义密码匹配的长度。
            var regex = /^(?![0-9A-Za-z]+$)(?![-`=\[\];',.~!@#$%^&*()_+|{}:"?]+$)(?![0-9-`=\[\];',.~!@#$%^&*()_+|{}:"?]+$)(?![A-Za-z-`=\[\];',.~!@#$%^&*()_+|{}:"?]+$)[0-9a-zA-Z-`=\[\];',.~!@#$%^&*()_+|{}:"?]{8,16}$/;
            var test = regex.test(password);
            console.log(test+" ----checkAction2---- "+password);//输出正则匹配结果
        }

        /**
         * JS实现ArrayList
         */
        function ArrayList(){
    
    
              this.arr=[],
              this.size=function(){
    
    
                  return this.arr.length;
              },
              this.add=function(){
    
    
                  if(arguments.length==1){
    
    
                      this.arr.push(arguments[0]);
                  }else if(arguments.length>=2){
    
    
                      var deleteItem=this.arr[arguments[0]];
                      this.arr.splice(arguments[0],1,arguments[1],deleteItem)
                  }
                  return this;
              },
              this.get=function(index){
    
    
                  return this.arr[index];
              },
              this.removeIndex=function(index){
    
    
                  this.arr.splice(index,1);
              },
              this.removeObj=function(obj){
    
    
                  this.removeIndex(this.indexOf(obj));
              },
              this.indexOf=function(obj){
    
    
                  for(var i=0;i<this.arr.length;i++){
    
    
                      if (this.arr[i]===obj) {
    
    
                          return i;
                      };
                  }
                  return -1;
              },
              this.isEmpty=function(){
    
    
                  return this.arr.length==0;
              },
              this.clear=function(){
    
    
                  this.arr=[];
              },
              this.contains=function(obj){
    
    
                  return this.indexOf(obj)!=-1;
              } 
        };
    </script>
</body>
</html>

方式一和方式二实现效果:

index.html:66 false ----checkAction1----     7613Ss&&&
index.html:83 false ----checkAction2----     7613Ss&&& 

index.html:66 false ----checkAction1----     7613AA&&&
index.html:83 false ----checkAction2----     7613AA&&& 

index.html:66 false ----checkAction1----     7613aa&&&
index.html:83 false ----checkAction2----     7613aa&&& 

index.html:66 false ----checkAction1----     7613&&&
index.html:83 false ----checkAction2----     7613&&& 

index.html:66 false ----checkAction1----            
index.html:83 false ----checkAction2----             

index.html:66 false ----checkAction1---- 123761123&&&
index.html:83 false ----checkAction2---- 123761123&&& 

index.html:66 true ----checkAction1---- aaabbb&&&1
index.html:83 true ----checkAction2---- aaabbb&&&1 

index.html:66 false ----checkAction1---- aaabbb&&&
index.html:83 false ----checkAction2---- aaabbb&&& 

index.html:66 false ----checkAction1---- 1234567a
index.html:83 false ----checkAction2---- 1234567a 

index.html:66 true ----checkAction1---- 123AoA()$
index.html:83 true ----checkAction2---- 123AoA()$ 

index.html:66 true ----checkAction1---- 123aOa$-
index.html:83 true ----checkAction2---- 123aOa$- 

index.html:66 true ----checkAction1---- 123AoA$-
index.html:83 true ----checkAction2---- 123AoA$- 

index.html:66 true ----checkAction1---- 123789a$
index.html:83 true ----checkAction2---- 123789a$ 

index.html:66 true ----checkAction1---- 123789A$
index.html:83 true ----checkAction2---- 123789A$ 

index.html:66 false ----checkAction1---- 123aO a$
index.html:83 false ----checkAction2---- 123aO a$ 

index.html:66 false ----checkAction1---- 123Ao A$
index.html:83 false ----checkAction2---- 123Ao A$ 

index.html:66 false ----checkAction1---- 123789a $
index.html:83 false ----checkAction2---- 123789a $ 

index.html:66 false ----checkAction1---- 123789A $
index.html:83 false ----checkAction2---- 123789A $ 

index.html:66 false ----checkAction1---- 123789AoA
index.html:83 false ----checkAction2---- 123789AoA 

index.html:66 false ----checkAction1---- 123789aOa
index.html:83 false ----checkAction2---- 123789aOa 

index.html:66 false ----checkAction1---- 123A
index.html:83 false ----checkAction2---- 123A 

index.html:66 false ----checkAction1---- 123a
index.html:83 false ----checkAction2---- 123a 

index.html:66 false ----checkAction1---- AAA
index.html:83 false ----checkAction2---- AAA 

index.html:66 false ----checkAction1---- aaa
index.html:83 false ----checkAction2---- aaa 

index.html:66 false ----checkAction1---- 123
index.html:83 false ----checkAction2---- 123

方式三实现如下所示:

<!DOCTYPE html>
<html>
<head>
    <title>前端JS正则校验密码</title>
    <meta charset="utf-8">
    <script type="text/javascript" src="./jquery-1.10.2.js"></script>
    <style type="text/css">.ok{
    
    color:lightgreen;}.no{
    
    color:red;}.tip p {
    
    color: #0c79ba;}</style>
</head>
<body>
    <div class="tip">
        <div>
            <p><b>登录密码需满足如下要求:</b><p />
            <p>需要包含小写字母a...z或者大写字母A...Z <span class="upperCaseOrlowerCase" /></p>
            <p>需要包含数字0...9 <span class="number" /></p>
            <p>需要包含至少一位如下特殊字符-`=[];',.~!@#$%^&*()_+|{}:"? <span class="specificSymbol" /></p>
            <p>密码长度需要在8-16位之间 <span class="length" /></p>
            <p>两次设置的登录密码保持一致 <span class="confirmPassword" /></p>
        </div>
    </div>

    <div class="form">
        <p>
            <input placeholder="旧密码不能为空!" id="OldPassword" name="OldPassword" type="password" />
        </p>
        <p>
            <input placeholder="新密码不能为空!" id="Password" name="Password" type="password" />
        </p>
        <p>
            <input placeholder="确认密码不能为空!" id="ConfirmPassword" name="ConfirmPassword" type="password" />
        </p>
        <p>
            <input type="button" value="确定" onclick="ChangePassword()" />
        </p>
    </div>

    <script type="text/javascript">
        function keyUp(e) {
    
    
            // var currKey=0,e=e||event;
            // currKey=e.keyCode||e.which||e.charCode;
            // var keyName = String.fromCharCode(currKey);
            // console.log("按键码: " + currKey + " 字符: " + keyName);
            var input = $("#Password").val();
            var eq = $("#ConfirmPassword").val() == input;
            if (/^.*[A-Za-z]{1,}.*$/.test(input)) {
    
    
                $(".upperCaseOrlowerCase").html("<span class='ok'>OK</span>");
            } else {
    
    
                $(".upperCaseOrlowerCase").html("<span class='no'>NO</span>");
            }

            if (/^.*[0-9]{1,}.*$/.test(input)) {
    
    
                $(".number").html("<span class='ok'>OK</span>");
            } else {
    
    
                $(".number").html("<span class='no'>NO</span>");
            }

            if (/^.*[-`=\[\];',\.~!@@#\$%\^&\*\(\)_\+\|\{\}:\"\?]{1,}.*$/.test(input)) {
                $(".specificSymbol").html("<span class='ok'>OK</span>");
            } else {
                $(".specificSymbol").html("<span class='no'>NO</span>");
            }

            if (input.length >= 8 && input.length <= 16) {
                $(".length").html("<span class='ok'>OK</span>");
            } else {
                $(".length").html("<span class='no'>NO</span>");
            }

            if (!!input && eq) {
                $(".confirmPassword").html("<span class='ok'>OK</span>");
            } else {
                $(".confirmPassword").html("<span class='no'>NO</span>");
            }
        }

        function keyUpConfirmPassword(e) {
            var input = $("#Password").val();
            var eq = $("#ConfirmPassword").val() == input;
            if (!!input && eq) {
                $(".confirmPassword").html("<span class='ok'>OK</span>");
            } else {
                $(".confirmPassword").html("<span class='no'>NO</span>");
            }
        }

        document.getElementById("Password").onkeyup = keyUp;
        document.getElementById("ConfirmPassword").onkeyup = keyUpConfirmPassword;

        function ChangePassword() {
            var oldPassword = $("#OldPassword").val();
            var password = $("#Password").val();
            var confirmPassword = $("#ConfirmPassword").val();
            var message = "";

            if (password != confirmPassword && password != "") {
                message = message + "两次输入的密码不相符,请重新输入密码!<br/>";
                $("#ConfirmPassword").focus();
            }
            if (!(password.length >= 8 && password.length <= 16)) {
                message = "密码长度需要在8-16位之间!<br/>";
                $("#Password").focus();
            }
            if (!(/^.*[-`=\[\];',\.~!@#\$%\^&\*\(\)_\+\|\{
    
    \}:\"\?]{
    
    1,}.*$/.test(password))) {
    
    
                message = "需要包含至少一位如下特殊字符-`=[];',.~!@#$%^&*()_+|{}:\"?!<br/>";
                $("#Password").focus();
            }
            if (!(/^.*[0-9]{1,}.*$/.test(password))) {
    
    
                message = "需要包含数字0...9!<br/>";
                $("#Password").focus();
            }
            if (!(/^.*[A-Za-z]{1,}.*$/.test(password))) {
    
    
                message = "需要包含小写字母a...z或者大写字母A...Z!<br/>";
                $("#Password").focus();
            }
            if (password.trim() == "") {
    
    
                message = "密码不能为空,请输入密码!<br/>";
                $("#Password").focus();
            }
            if (oldPassword.trim() == "") {
    
    
                message = "请输入旧密码!<br/>";
                $("#OldPassword").focus();
            }

            if (message != "")
            {
    
    
                alert(message);
                return false;
            }
        }
    </script>
</body>
</html>

方式三实现效果:

目录
相关文章
|
6月前
|
运维 前端开发 JavaScript
前端埋点校验工具:数据驱动的最后一道防线
数据埋点是企业决策的关键基础,但常面临覆盖率低、数据不准和故障难排查三大难题。本文深入剖析了这些问题的成因与影响,并提出“三维校验矩阵”解决方案:提升覆盖率至99.8%、降低错误率至0.3%、提速故障定位5倍。同时对比Split.io、Tealium、Sentry、板栗看板等工具优劣,为企业选型提供参考。迈向高质量数据治理,从精准埋点开始。
|
10月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
570 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
9月前
|
JavaScript 前端开发 API
|
9月前
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
369 8
|
9月前
|
JavaScript 前端开发 容器
|
9月前
|
JavaScript 前端开发
|
9月前
|
存储 JavaScript 前端开发
|
10月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
10222 23
|
9月前
|
移动开发 JavaScript 前端开发
|
9月前
|
存储 JavaScript 前端开发

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    715
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    312
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    265
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    218
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    320
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    459
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    202
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    150
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    216
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    292