Java密码校验(正则表达式):密码由这四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。

news2025/1/28 1:17:22

1. 需求

对用户密码的强度进行校验,要求用户密码达到一定的强度,符合安全性要求。

1.1. 基础版需求

密码必须由字母和数字组成(同时包括数字和数字);密码长度大于等于8个字符。

1.2. 进阶版需求

密码由这四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。

2. 基础版解析

需求:密码必须由字母和数字组成(同时包括数字和数字);密码长度大于等于8个字符。

2.1. 原理

使用正则表达式校验字符串。

正则表达式构建思路(负向预查模式):

  1. 字符为数字或字母;
  2. 不能全是数字;
  3. 不能全是字母;
  4. 字符数量大于等于8.

2.2. 核心代码

package org.example;

import java.util.regex.Pattern;

/**
 * 密码校验器。
 */
public class PasswordValidator {

    /**
     * 密码由数字和下划线组成,且大于等于8个字符。
     */
    public static boolean isCharacterAndNumber(String password) {
        String pattern = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,}$";
        return Pattern.matches(pattern, password);
    }
    
}

2.3. 正则表达式含义解析

含义正则表达式
字符串开头^
字符为数字或字母[0-9A-Za-z]
不全是数字(?![0-9]+$)
不全是字母(?![a-zA-Z]+$)
字符数量大于等于8{8,}
字符串结尾$

2.4. 测试用例

2.4.1. 示例代码

package org.example;

public class TestBase {
    public static void main(String[] args) {

        isValid("");
        isValid("中文");
        isValid("abc-1234567");
        isValid("1234567");
        isValid("abc");
        isValid("zzz111");


        isValid("zzz12345");
        isValid("abc1234567");
        isValid("abc12345bbb");
    }

    private static void isValid(String text) {
        System.out.println(text + " === " + PasswordValidator.isCharacterAndNumber(text));
    }


}

2.4.2. 运行结果

在这里插入图片描述

3. 进阶版解析

需求:密码由四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。

3.1. 原理

使用正则表达式校验字符串。

正则表达式构建思路(负向预查模式):

  1. 密码只包含数字、大写字母、小写字母和特殊字符
  2. 不全是 数字,或大写字母,或小写字母
  3. 不全是 数字,或大写字母,或特殊字符
  4. 不全是 数字,或小写字母,或特殊字符
  5. 不全是 大写字母,或小写字母,或特殊字符
  6. 字符数量大于等于8.

3.2. 核心代码


import java.util.regex.Pattern;

/**
 * 密码校验器。
 */
public class PasswordValidator {

    /**
     * 密码由四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。
     */
    public static boolean isValid(String password) {
        // 正则表达式的内容如下:
        // ^(?![0-9A-Za-z]+$)(?![0-9A-Z\W]+$)(?![0-9a-z\W]+$)(?![A-Za-z\W]+$)[0-9A-Za-z~!@#$%^&*()__+`\-={}|[\]\\:";'<>?,./]{8,}$
        // 在 Java 中使用,需要转义;转义后的结果如下。
        String pattern = "^(?![0-9A-Za-z]+$)(?![0-9A-Z\\W]+$)(?![0-9a-z\\W]+$)(?![A-Za-z\\W]+$)[0-9A-Za-z~!@#$%^&*()_+`\\-={}|\\[\\]\\\\:\";'<>?,./]{8,}$";
        return Pattern.matches(pattern, password);
    }

}

3.3. 正则表达式含义解析

含义正则表达式
字符串开头^
密码只包含数字、大写字母、小写字母和特殊字符[0-9A-Za-z~!@#$%^&*()_+`-={}|[]\:";'<>?,./]
不全是 数字,或大写字母,或小写字母(?![0-9A-Za-z]+$)
不全是 数字,或大写字母,或特殊字符(?![0-9A-Z\W]+$)
不全是 数字,或小写字母,或特殊字符(?![0-9a-z\W]+$)
不全是 大写字母,或小写字母,或特殊字符(?![A-Za-z\W]+$)
字符数量大于等于8{8,}
字符串结尾$

3.4. 测试用例

3.4.1. 示例代码

public class TestComplex {

    public static void main(String[] args) {
        isValid("");
        isValid("中文");
        isValid("123456789");
        isValid("aaabbbccc");
        isValid("AAABBBCCCabc");
        isValid("AAAbbb123");
        isValid("abcABC1@中文");
        isValid("aB1@");

        isValid("abcABC1@");
        isValid("aaaBBB111@");
        isValid("aaabbbBBB111~!@#$%^&*()_+=-`{}|[]\\:\";'<>?,./");
    }

    private static void isValid(String text) {
        System.out.println(text + " === " + PasswordValidator.isValid(text));
    }

}

3.4.2. 运行结果

在这里插入图片描述

4. Gitee示例项目(idea)

密码校验器Demo

5. 参考

java正则校验,密码必须由字母和数字组成

几种常见的密码校验正则表达式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1426916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ARM Coresight 系列文章 8.1 - ARM Coresight 通过 APBIC arbiter】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 APBIC arbiter仲裁使用举例APBIC arbiter 在 SoC-600中,APBIC 是用来为 APB4 master 和 APB4 slave 提供 连接关系的组件。APB 是一种简单的总线协议,通常用于低带宽或低性能外设,如定时器、接口控制等。APBIC …

2024美赛数学建模C题思路分析 - 网球的动量

1 赛题 问题C&#xff1a;网球的动量 在2023年温布尔登绅士队的决赛中&#xff0c;20岁的西班牙新星卡洛斯阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来首次在温布尔登公开赛失利&#xff0c;并结束了他在大满贯赛事中历史上最伟大的球员之一的非凡表…

Spring Cloud Config核心功能和原理解析

配置管理的前世今生 随着技术的发展&#xff0c;配置项管理变得越来越简单&#xff0c;尽管如今它只限于管理业务属性或者配置初始化参数等等&#xff0c;但是当年它可肩负着 Spring IOC 的光荣使命&#xff0c;风光无限。 想当年刚入行的时候还是 SSH&#xff08;Struts Sp…

【数据分享】1929-2023年全球站点的逐年最高气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

22.云原生之GitLab CICD实战及解析【干货】

云原生专栏大纲 文章目录 准备工作gitlab-ci.yml流水线mven打包项目制作并推送镜像kaniko方式docker方式 部署到k8s验证执行情况 GitLab Runner k8s执行器工作流程注册配置kubernetes runnerkubernetes runner配置通过修改 Pod 规范为每个构建作业创建一个 PVC自定义卷装载持久…

负压自动放水器不如早来永成购

CWG&#xff0d;FY型负压自动放水器的结构与性能等参数 &#xff08;1&#xff09;结构 负压自动放水器主要由通大气阀1、负压平衡管2、托盘3、侧导向杆4、磁铁5、中心导向杆6、外筒7、放水阀保护罩8、放水阀9、导向座10、浮漂11、进水阀12等组成。 &#xff08;2&#xff09;性…

Quick BI中lod函数之lod_fixed

一、lod函数简介 LOD函数的全称是详细级别表达式&#xff08;Level Of Detail Expressisons&#xff09;。它主要是为了克服一些表达式之间计算颗粒度不一致的问题。比如&#xff0c;要计算第一季度各月销售收入占比&#xff0c;这里分子计算颗粒度为’月’&#xff0c;但是分…

UML---用例图,类图

用例图 用例图&#xff08;Use Case Diagram&#xff09;主要描述系统的功能需求和参与者与系统之间的交互。它是用户与系统交互的最简表示形式&#xff0c;展现了用户和与他相关的用例之间的关系。用例图被视为系统的蓝图&#xff0c;通过它&#xff0c;人们可以获知系统不同种…

【win】vscode无法使用ctrl+shift+p快捷键的解决方案

本文首发于 ❄️慕雪的寒舍 今天使用vscode的时候遇到的这个问题&#xff0c;明明快捷键设置的是ctrlshiftp&#xff0c;但是在电脑上怎么敲都敲不出来&#xff0c;因为用这个快捷键打开命令面板都习惯了&#xff0c;也不想换&#xff0c;就在找原因。 同时百度的时候还遇到了…

Camera2+OpenGL ES+MediaCodec+AudioRecord实现录制音视频写入H264 SEI数据

记录一下学习过程&#xff0c;得到一个需求是基于Camera2OpenGL ESMediaCodecAudioRecord实现录制音视频。 需求&#xff1a; 在每一帧视频数据中&#xff0c;写入SEI额外数据&#xff0c;方便后期解码时获得每一帧中的自定义数据。点击录制功能后&#xff0c;录制的是前N秒至…

Echars3D 饼图开发

关于vue echart3D 饼图开发 首先要先下载 "echarts-gl", 放在main.js npm install echarts-gl --save <template><div class"cointan"><!-- 3d环形图 --><div class"chart" id"cityGreenLand-charts"><…

Git版本管理工具(实战进阶):零基础到起飞实战项目完整篇 →Git学习一篇就够 从基本指令、到本地仓库、远程仓库、实战项目开发演练介绍超详细!

heima 李师傅最新版 Git的讲解 文章目录 Git在实战项目开发使用功能学习01.Git 初识02.Git 仓库03.Git 的三个区域04.Git 文件状态05.Git 暂存区作用06.练习-登录页面07.Git-切换版本08.删除文件09.忽略文件10.分支的概念11.练习-登录 bug 修复12.分支-合并与删除13.分支-合并与…

three.js CSS3DRenderer、CSS3DObject渲染HTML标签

有空的老铁关注一下我的抖音&#xff1a; 效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"><…

工业自动化中与多台PLC通讯的基本指南

与多台PLC进行通讯是工业自动化中常见的需求。通常&#xff0c;一台THM&#xff08;通常是触摸屏或人机界面&#xff09;会与多台PLC进行通讯&#xff0c;以实现数据交互和控制功能。以下是一个基本的步骤指南&#xff0c;用于实现1台THM与多台PLC的通讯&#xff1a; 确定通讯…

本地部署GeoServe服务并结合内网穿透实现任意浏览器远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

【2024美赛C题】网球大佬带你无背景压力分析解题思路!

2024美赛数学建模c题思路分享 加群可以享受定制等更多服务&#xff0c;或者搜索B站&#xff1a;数模洛凌寺 联络组织企鹅&#xff1a;936670395 以下是C题老师的解题思路&#xff08;企鹅内还会随时更新文档&#xff09;&#xff1a; 1背景介绍 2024MCM问题C&#xff1a;网…

LeetCode:283. 移动零

283. 移动零 1&#xff09;题目2&#xff09;代码方法一&#xff1a;两层for循环方法二&#xff1a;使用双指针 3&#xff09;结果方法一结果方法二结果 1&#xff09;题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的…

STM32目录结构

之前一直头疼的32目录&#xff0c;比51复杂&#xff0c;又没有C规律&#xff0c;也不像python脚本文件关联不强&#xff0c;也不像工整的FPGA工程&#xff0c;编的时候到处放&#xff0c;爆出的错千奇百怪。短暂整理了一个&#xff0c;还是没有理得很轻。 startup_stm32f10x_m…

Vue-51、Vue技术github案例(发送ajax)

1、在index引入bootstrap.csss (注意第三方css库最好在indxe里面引入) 2、List.vue源码 <template><div class"row"><div v-show"users.length" class"card" v-for"p in users" :key"p.login"><a :hr…

ES6中新增Array.from()函数的用法详解

目录 Map对象的转换 Set对象的转换 字符串的转换 类数组对象的转换 Array.from可以接受三个参数 ES6为Array增加了from函数用来将其他对象转换成数组。当然&#xff0c;其他对象也是有要求&#xff0c;也不是所有的&#xff0c;可以将两种对象转换成数组。 1、部署了Iter…