Java/Kotlin 密码复杂规则校验
原文地址: Java/Kotlin 密码复杂度校验 | Stars-One的杂货小窝
每次有那个密码复杂校验,不会写正则表达式,每次都去搜,但有时候校验的条件又是奇奇怪怪的,百度都搜不到
找到了个代码判断的方法,每次匹配计算匹配的次数,最后在用次数来作为判断是否满足的条件即可
Java
package site.starsone.demo;
public class CheckPwdUtils {
//数字
public static final String REG_NUMBER = ".*\\d+.*";
//小写字母
public static final String REG_UPPERCASE = ".*[A-Z]+.*";
//大写字母
public static final String REG_LOWERCASE = ".*[a-z]+.*";
//特殊符号
public static final String REG_SYMBOL = ".*[~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]+.*";
/**
* 长度至少minLength位,且最大长度不超过maxlength,须包含大小写字母,数字,特殊字符matchCount种以上组合
* @param password 输入的密码
* @param minLength 最小长度
* @param maxLength 最大长度
* @param matchCount 次数
* @return 是否通过验证
*/
public static boolean checkPwd(String password,int minLength,int maxLength,int matchCount){
//密码为空或者长度小于8位则返回false
if (password == null || password.length() <minLength || password.length()>maxLength ) return false;
int i = 0;
if (password.matches(REG_NUMBER)) i++;
if (password.matches(REG_LOWERCASE))i++;
if (password.matches(REG_UPPERCASE)) i++;
if (password.matches(REG_SYMBOL)) i++;
return i >= matchCount;
}
}
使用
//长度至少为8位,最大为20位,包含数字 小写字母 大写字母 特殊符号任意两种及以上
CheckPwdUtils.checkPwd("123456", 8, 20, 2)
Kotlin
object CheckPwdUtils {
//数字
const val REG_NUMBER = ".*\\d+.*"
//小写字母
const val REG_UPPERCASE = ".*[A-Z]+.*"
//大写字母
const val REG_LOWERCASE = ".*[a-z]+.*"
//特殊符号
const val REG_SYMBOL = ".*[~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]+.*"
/**
* 长度至少minLength位,且最大长度不超过maxlength,须包含大小写字母,数字,特殊字符matchCount种以上组合
* @param password 输入的密码
* @param minLength 最小长度
* @param maxLength 最大长度
* @param matchCount 次数
* @return 是否通过验证
*/
fun checkPwd(password: String, minLength: Int, maxLength: Int, matchCount: Int): Boolean {
//密码为空或者长度小于8位则返回false
if (password.length < minLength || password.length > maxLength) return false
var i = 0
if (password.matches(Regex(REG_NUMBER))) i++
if (password.matches(Regex(REG_LOWERCASE))) i++
if (password.matches(Regex(REG_UPPERCASE))) i++
if (password.matches(Regex(REG_SYMBOL))) i++
return i >= matchCount
}
}
使用
val pwd = "123456"
//长度至少为8位,最大为20位,包含数字 小写字母 大写字母 特殊符号任意两种及以上
CheckPwdUtils.checkPwd(pwd, 8, 20, 2)
Java/Kotlin 密码复杂规则校验的更多相关文章
- springMVC:校验框架:多规则校验,嵌套校验,分组校验;ssm整合技术
知识点梳理 课堂讲义 学习目标 能够阐述表单验证的分类和区别 能够运用表单验证的常用注解 能够编写表单验证的示例 能够编写SSM整合的应用案例 能够总结SSM整合的步骤 1 校验框架 1.1 入门-视 ...
- 使用Java+Kotlin双语言的LeetCode刷题之路(二)
BasedLeetCode LeetCode learning records based on Java,Kotlin,Python...Github 地址 序号对应 LeetCode 中题目序号 ...
- 案例17-validate自定义校验规则校验验证码是否输入正确
1 自定义校验规则代码 <script type="text/javascript"> //使用validate插件进行表单的校验 $(function(){ $(&q ...
- mysql8.0新增用户及密码加密规则修改
MySQL8.0已经发布GA版,当前最新GA版本为8.0.12.虽然相对于之前版本,MySQL8.0没有加入新元素,但是,经过代码重构,MySQL8.0的优化器更加强大,同时也有一些新特性,如支持索引 ...
- 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)
1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...
- Java/Kotlin 使用Redis模拟发送验证码
原文地址: Java/Kotlin 使用Redis模拟发送邮件验证码 - Stars-One的杂货小窝 Java中常用语连接Redis的库有lettuce和jredis,一般是推荐lettuce,其具 ...
- Java标识符的命名规则
Java语言中,为各种变量.方法和类等起的名字称为标识符Java标识符的命名规则:应以字母.下划线.美元符开头后跟字母.下划线.美元符或数字Java标识符大小写敏感,长度无限制 1.java中能用作标 ...
- JS正则密码复杂度校验之:JS正则匹配半角英文符号
概述 在JS密码校验中常常会遇到密码强度的校验需求,借用一位朋友提问的图,他在工作中遇到的一个比较经典的密码强度校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验 ...
- JS正则密码复杂度校验之:至少有多种字符中的其中几种
概述 续接上文的密码校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验证密码段中在要求的四种(大写字母,小写字母,数字,标点符号)类型中至少存在三种. 第一个难点 ...
- 使用Java+Kotlin双语言的LeetCode刷题之路(三)
BasedLeetCode LeetCode learning records based on Java,Kotlin,Python...Github 地址 序号对应 LeetCode 中题目序号 ...
随机推荐
- CORS小结
1.说明 https://www.cnblogs.com/xuanyuan/p/12979841.html 该文基于故事图文并茂地讲述了跨域的前生今世,因为文章是故事形式,里面的一些要点都只是一提而过 ...
- 心动了!iPhone 15 Pro超窄边框感受下:1.5mm破历史纪录 “跑马框”再见
综合目前已知爆料来看,iPhone 15系列将有7大升级.其中一个比较明显的直观变化是,新款iPhone全系边框都会更窄.iPhone 15 Pro.Pro Max的边框宽度仅为1.55mm,破历史记 ...
- BoolToStr、TBooleanHelper、Boolean 转 字符串
方法1:直接使用 BoolToStr procedure TForm3.btn1Click(Sender: TObject); var a, b: Boolean; begin a := True; ...
- 《ASP.NET Core 微服务实战》-- 读书笔记(第10章)
第 10 章 应用和微服务安全 云应用意味着应用运行所在的基础设施无法掌控,因此安全不能再等到事后再考虑,也不能只是检查清单上毫无意义的复选框 由于安全与云原生应用密切相关,本章将讨论安全话题,并用示 ...
- HBase-hbase shell操作
hbase shell操作 一.DDL操作 1.开启hbase shell hbase shell 2.查看hbase状态 Status 3.查看hbase版本 Version 4.创建命名空间 cr ...
- Hive分区和分桶的区别
1.前言 Hive的分区和分桶都是细化数据管理,加快数据查询和分析,两者有什么区别呢?下面讲解一下分区和分桶的原理. 2.分区 (1)分区原理 Hive的分区表可以有一个或多个分区键,用于确定数据的存 ...
- Django高级特性:django-apscheduler定时任务
前言: 在使用Django框架开发web项目时,很多时候需要设置定时任务或让用户手动在页面上设置定时任务 在Django中实现定时任务功能大概有以下三种方法: Celery 分布式任务队列.侧重实 ...
- Shell 特殊符号(变量)用法小结
Shell | 特殊变量 $n 基本语法: $n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}) 例如: ...
- 《.NET物联网从零开始系列》-开篇
近日搞硬件网关时,那些残存的数电.模电和通信原理的记忆时常在脑海中萦绕: 想起来多年前看张高兴的博客学会了.netcore+树莓派进行物联网开发. 使用dragonboard(龙板)搭载windows ...
- MySQL重新设置auto_increment值
需求描述 通常,我们都会在数据库表中设置一个自增字段作为主键,该字段的值会随着添加新记录而自增. 同时也必须注意,这个自增字段的值只会一直增加,即使把记录删除了,该自增字段的值也不会变小. 因此,就会 ...