Java正则校验密码至少包含:字母数字特殊符号中的2种

news2024/10/2 22:27:30

一、语法

字符说明
\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如, n匹配字符 n\n 匹配换行符。序列 \\\\ 匹配 \\ ,\\( 匹配 (
^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。
$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。
*零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。
+一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。
?零次或一次匹配前面的字符或子表达式。例如,"do(es)?“匹配"do"或"does"中的"do”。? 等效于 {0,1}。
{n}_n _是非负整数。正好匹配 n 次。例如,"o{2}"与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。
{n,}_n _是非负整数。至少匹配 _n _次。例如,"o{2,}“不匹配"Bob"中的"o”,而匹配"foooood"中的所有 o。"o{1,}“等效于"o+”。"o{0,}“等效于"o*”。
{n,m}m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,"o{1,3}"匹配"fooooood"中的头三个 o。‘o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。
?当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?“只匹配单个"o”,而"o+“匹配所有"o”。

二、正则实战

1、纯字母

"[a-zA-Z]{1,}$"

2、纯数字

"[0-9]{1,}$"

3、字母和数字组合

"((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$"

4、字母或数字

"[a-zA-Z0-9]+$"

5、字母、数字、下划线,都可以

"\\w+$"

6、字母、数字、特殊符号,至少匹配2种

/**
     * 假定设置密码时,密码规则为:  字母、数字、特殊符号,至少匹配2种
     * 则密码可能出现的情况有:
     * 1、数字+特殊符号
     * 2、字母+特殊符号
     * 3、字母+数字
     * 4、字母+数字+特殊符号
     * (组合与顺序无关)
     * 解决思路:
     * 1、遍历字符串的字符数组,查看是否包含目标特殊字符,若包含,则标记字符串
     * 包含特殊字符,并替换当前特殊字符为''。
     * 2、判断剩下的字符组成的字符串,是否匹配以下情况
     * - 纯字母
     * - 纯数字
     * - 字母+数字
     * 3、字符串匹配规则
     * 纯字母+包含特殊字符  ---- 匹配通过
     * 纯数字+包含特殊字符 ---- 匹配通过
     * 字母+数字+包含个数字符 ---- 匹配通过
     */
    //特殊字符
    public static final String SPEC_CHARACTERS = " !\"#$%&'()*+,-./:;<=>?@\\]\\[^_`{|}~";
    // 纯字母
    public static final String character = "[a-zA-Z]{1,}$";
    // 纯数字
    public static final String numberic = "[0-9]{1,}$";
    // 字母和数字
    public static final String number_and_character = "((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)" +
            "|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$";
    // 字母或数字
    public static final String number_or_character = "[a-zA-Z0-9]+$";
    // 字母数字下划线
    public static final String ncw = "\\w+$";

    public static boolean checkPassword(String targetString) {
        String opStr = targetString;
        boolean isLegal = false;
        boolean hasSpecChar = false;
        char[] charArray = opStr.toCharArray();
        for (char c : charArray) {
            if (SPEC_CHARACTERS.contains(String.valueOf(c))) {
                hasSpecChar = true;
                // 替换此字符串
                opStr = opStr.replace(c, ' ');
            }
        }
        String excSpecCharStr = opStr.replace(" ", "");
        boolean isPureNum = Pattern.compile(numberic).matcher(excSpecCharStr).matches();
        boolean isPureChar = Pattern.compile(character).matcher(excSpecCharStr).matches();
        boolean isNumAndChar = Pattern.compile(number_and_character).matcher(excSpecCharStr).matches();
        isLegal = ((isPureNum && hasSpecChar)
                || (isPureChar && hasSpecChar) || isNumAndChar && hasSpecChar) || isNumAndChar;
        System.out.println("字符串:" + targetString + ",是否符合规则:" + isLegal);
        System.out.println("---------------");
        return isLegal;
    }

    public static void main(String[] args) {
        checkPassword("fasdagd");
        checkPassword("41234123");
        checkPassword("#$%^&&*(");
        checkPassword("fasd$$");
        checkPassword("41234%%%");
        checkPassword("fasd41^(324");
        checkPassword("fa413%^&*");
        checkPassword("&%fa413%^&*");
    }

测试结果:
在这里插入图片描述

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

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

相关文章

如何开发一个企业ERP系统

企业ERP系统是一种针对企业管理和运营的综合性管理软件&#xff0c;旨在提高企业的效率和生产力。随着信息化时代的发展&#xff0c;越来越多的企业意识到引入ERP系统的重要性。本文将详细介绍如何开发一个企业ERP系统&#xff0c;为读者提供丰富、详细的信息。 一、需求分析 …

基于SpringBoot+Vue的地方美食分享网站设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

SQL SERVER ROW_NUMBER、RANK、DENSE_RANK 分页应用

** ROW_NUMBER 、RANK、DENSE_RANK** ROW_NUMBER () over( order by 列) # 不论【列】是否存在重复&#xff0c; 序号都不会重复的&#xff0c;通常用唯一个标识的列 RANK() over(order by 列) # 列 存在重复&#xff0c; 则 顺序号一致&#xff0c; 两个人并列第一&#xff0c…

SpringBoot Plus+代码生产器

0目录 1. Mybatis Plus 2.代码生产器 1.Mybatis Plus 创建数据库和表&#xff08;id没有设置主键和自增长&#xff09; 创建springBoot导入依赖 安装lombok 配置yml 实体类加入注解 无参构造和有参构造 Mapper接口 扫描接口 测试 加入日志 添加 数据库…

Springboot 多数据源 dynamic-datasource动态添加移除数据源

0.前言 上一篇文章我们讲了如何通过多数据源组件&#xff0c;在Spring boot Druid 连接池项目中配置多数据源&#xff0c;并且通过DS注解的方式切换数据源&#xff0c;《Spring Boot 配置多数据源【最简单的方式】》。但是在多租户的业务场景中&#xff0c;我们通常需要手动的…

Python:Spider爬虫工程化入门到进阶(2)使用Spider Admin Pro管理scrapy爬虫项目

Python&#xff1a;Spider爬虫工程化入门到进阶系列: Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;1&#xff09;创建Scrapy爬虫项目Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;2&#xff09;使用Spider Admin Pro管理scrapy爬虫项目 目录 1、使…

排序算法(九大)- C++实现

目录 基数排序 快速排序 Hoare版本&#xff08;单趟&#xff09; 快速排序优化 三数取中 小区间优化 挖坑法&#xff08;单趟&#xff09; 前后指针法&#xff08;单趟&#xff09; 非递归实现&#xff08;快排&#xff09; 归并排序 非递归实现&#xff08;归并&am…

小程序https域名校验文件放在根目录

1. 下载校验文件 微信公众号平台 - 开发管理 - 开发设置 - 业务域名 2. 将校验文件放在服务器nginx - html 目录下 3. 修改nginx.conf 我这里配置的https主要是用来转发后台接口路径的 4. 验证 https://域名/校验文件名.txt&#xff0c;有返回即配置成功

OpenMesh 网格数据读取写入

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 通常,网格读取器和写入器例程是直接根据它们支持的数据结构和各自的文件格式编写的。这种方法的主要缺点是针对不同的数据结构或添加另一种文件格式会导致代码重复。因此OpenMesh提供了另一种做法,添加一个中间者…

java序列化框架全集讲解

一、简介 Java序列化框架是一种用于在Java应用程序中将对象转换为字节流或从字节流反序列化为对象的工具。序列化是将对象的状态转换为字节流的过程&#xff0c;以便可以将其存储在文件中、通过网络传输或在不同的系统之间共享。反序列化是将字节流转换回对象的过程。 Java序列…

【JS】前端编程8个小技巧(一)

文章目录 1.判断两个数是不是符号相同函数书写运算结果 2.判断一个数n是不是2的整数次幂函数书写运算结果 3.倒序遍历简写函数书写运算结果 4.快速得到一个星级评分函数书写运算结果 5.在程序抛出异常时快速切换搜索引擎stackoverflow的人机验证界面函数书写示例检索结果stacko…

发现全新TNAS Mobile 3,畅享铁威马NAS的乐趣!

千呼万唤始出来&#xff0c;铁威马全新TNAS mobile 3.2.18正式上线啦&#xff01;新增超实用的功能&#xff0c;搭配全新的更合理美观的 UI。往下看&#xff0c;给大家带来全新的移动存储管理体验&#xff01; 注意事项 目前TNAS mobile 3.2.18仅限于在安卓手机上运行&#xf…

MyBatis源码剖析之Configuration、SqlSession、Executor、StatementHandler细节

文章目录 概述源码剖析-初始化ConfigurationMappedStatement 源码剖析-执行SQL流程SqlSessionSqlSessionFactoryDefaultSqlSession 源码剖析-ExecutorBaseExecutorSimpleExecutor 源码剖析-StatementHandlerParameterHandlerStatementHandlerResultSetHandler 概述 MyBatis是一…

【李宏毅机器学习·学习笔记】Tips for Training: Batch and Momentum

本节课主要介绍了Batch和Momentum这两个在训练神经网络时用到的小技巧。合理使用batch&#xff0c;可加速模型训练的时间&#xff0c;并使模型在训练集或测试集上有更好的表现。而合理使用momentum&#xff0c;则可有效对抗critical point。 课程视频&#xff1a; Youtube&…

如何应对批发与零售行业的致命危机?附解决方法!

随着科技的不断进步和消费者行为的变化&#xff0c;批发和零售行业正迫切需要进行数字化转型升级&#xff0c;以应对日益激烈的竞争压力和市场变革。这一转型势在必行&#xff0c;但是该行业面临诸多痛点。因此&#xff0c;企业需要寻找适合自己的解决方案&#xff0c;以应对数…

【前端实习生备战秋招】—HTML 和 CSS面试题总结(三)

【前端实习生备战秋招】—HTML 和 CSS面试题总结&#xff08;三&#xff09; 1.行内元素有哪些&#xff1f;块级元素有哪些&#xff1f; 空(void)元素有那些&#xff1f; CSS 规范规定&#xff0c;每个元素都有 display 属性&#xff0c;确定该元素的类型&#xff0c;每个元素…

更新页面无法回显

需求与问题&#xff1a; 在菜品管理开发中&#xff0c;我需要修改菜品&#xff0c;第一步是回显页面&#xff0c;但在我再三确认代码无误的情况下依旧无法回显内容 问题发现与解决&#xff1a; 经过排查&#xff0c;我发现我的DishDTO内容如下&#xff1a; Data public clas…

Vue 路由 router 配置(四)

一、下载 router 组件 1.1 删除文件 先把第三小节里面默认生成的文件删除干净&#xff0c;只剩下 main.js 和 App.vue&#xff0c;内容如下所示&#xff1a; import Vue from vue import App from ./AppVue.config.productionTip false;new Vue({el: #app,components…

公司/设计院文件数据防泄密系统「图纸加密软件」

图纸防泄密系统是指对企业电脑文件图纸数据透明加密防护的系统软件&#xff0c;可以防止公司内部数据泄密&#xff0c;通过动态加解密技术&#xff0c;有效防止公司内部数据泄密。即员工在创建、编辑文档时会被自动加密存放在硬盘上&#xff0c;防止员工故意或由于疏忽而造成泄…

深入剖析java字节码

目录 1.Demo源码 2.字节码 3.class文件反编译java文件 4.字节码结构 4.1 魔数 ​编辑4.2 版本号 4.3 常量池 4.3.1 常量池计数器 4.3.2 常量池表 ​编辑4.3.3 常量类型和结构 4.3.4 常量解读 5.访问标识 6.类索引、父类索引、接口索引 7.字段表集合 8.方法表集合…