java连续多位相同字符判断的正则表达式_密码验证连续多位相同或者顺序字符引发的思考.md...
密码验证连续多位相同或者顺序字符引发的思考
需求
虽然⽤户对于这种复杂的密码验证恨之⼊⾻,但是有时出于安全的考虑,我们系统不得不强制要求⽤户设置更⾼强度的密码。
如:不能连续出现多位相同或者连续的字符。
思考
对于常规的验证,我们通常使⽤正则表达式,所以我⼀开始也从这⽅⾯⼊⼿,但始终没有⼀个实现的思路。
后来看到有⼈⽤字符数组,通过下标判断是否连续,再加上偶然看到有⼈在讨论 ASCII 码,灵机⼀动,结合这两者就是⼀个很好的实现。实现
简单实现,如下所⽰:
import static org.junit.Assert.*;
import org.junit.Test;
public class MainTest {
@Test
public void test() {
String password = "abcdd";
boolean isRepeat = isRepeatChar(password, 1);
boolean isOrder = isOrderChar(password, 3);
assertEquals(true, isRepeat);
assertEquals(true, isOrder);
}
/
**
* 是否存在连续 i 位顺序字符
* @param str
* @param i 存在 i 位顺序字符,i 应⼤于等于1
* @return 如果 i 位顺序的字符,则返回 true,否则返回 false
*/
private boolean isOrderChar(String str, int i) {
char[] charArr = CharArray();
int len = charArr.length;
int count = 0;
int t = charArr[0];
for (int j = 1; j < len; j++) {
if ((t + 1) == charArr[j]) {
count ++;
if (count == i) {时间正则表达式java
return true;
}
} else {
count = 0;
}
t = charArr[j];
}
return false;
}
/**
* 字符串中是否⾄少包含 i 位重复相同的字符
* @param str
* @param i i位重复数字,i 应⼤于等于1
* @return 如果包含 i 位重复相同的字符,则返回 true,否则返回 false */
private boolean isRepeatChar(String str, int i) {
char[] charArr = CharArray();
int len = charArr.length;
int count = 0;
int t = charArr[0];
for (int j = 1; j < len; j++) {
if (t == charArr[j]) {
count ++;
if (count == i) {
return true;
}
} else {
t = charArr[j];
count = 0;
}
}
return false;
}
}
总结
实现是很简单的,但是如果执着在正则表达式,可能再尝试很久都做不出来,⽽且明显增加难度,也不是⼀个好的实现⽅式。
字符数组下标的实现⽅式,对于 1-9,a-z,A-Z,虽然是有限的枚举,先不说好不好,⾃⼰写起来就很烦。
作⽂最后⼀句,喊⼝号:多思考,多尝试,多总结 。
期待你更好的实现分享
参考
js验证连续两位数字递增或递减和连续三位数字相同
java密码验证正则表达式校验
,正则表达式就是记录⽂本规则的代码.php密码验证正则表达式(8位长度限制)<?php //密码验证 $password =
"zongzi_Abc_oo13a2"; $n ...
JS密码校验规则前台验证&lpar;不能连续字符(如123、abc)连续3位或3位以上)&lpar;不能相同字符(如111、aaa)连续3位或3位以上)
密码必须为8到16位且必须包含数字和字母 密码必须包含特殊字符[_%] 不能连续字符(如123.abc)连续3位或3位以上 不能相同字符(如111.aaa)连续3位或3位以上 /** * ...
【WCF】Silverlight+wcf+⾃定义⽤户名密码验证
VUE 密码验证与提⽰
1. 概述 1.1 说明 vue项⽬中,为了较为明了的让⽤户看到所输⼊的密码信息的长度与复杂度是否满⾜
要求,开发⼀个组件来满⾜此需求(当密码输⼊时进⾏密码验证操作,当密码的长度在8到24位之间,密码中 ...
[c/c++] programming之路(24)、字符串(五)——字符串插⼊,字符串转整数,删除字符,密码验证,注意事项
1.将字符串插⼊到某位置(原字符串“hello yincheng hello cpp hello linux”,查cpp,到后在cpp的后⾯插⼊字符串“hello c”) 需要⽤到strstr字符 ...
第⼀百五⼗节,封装库--JavaScript,表单验证--密码验证
封装库--JavaScript,表单验证--密码验证 效果图 html
& ...
php实现 密码验证合格程序(复杂问题分类,超简单的)(分类&plus;规范编码)
php实现 密码验证合格程序(复杂问题分类,超简单的)(分类+规范编码) ⼀.总结 ⼀句话总结:复杂问题分类,超简单的.分类+规范编码. 1.写的时候判断 不能有相同长度超2的⼦串重复 的时候,⼦ ...
Oracle密码验证函数与Create Profile
今天看到了⼀个oracle密码函数的东西,就在⽹上⽂档⾃⼰做测试,刚开始看不懂,最后做完记录⼀下 密码函数的作⽤就是要将⽤户密码进⾏限制,⽐如申请⼀个⽹站的账号的时候,密码会要求你不少于8位,必须要 ...
随机推荐
php stdclass转数组
打印输出是这样 object(stdClass)[11] //object public 'xx' => string 'xxxxxx' (length=21)可⽤函数处理 get_object ...
Linux实战问题解决⽅案(1):Could not get lock
环境: Ubuntu12.04 问题描述: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily un ...
Burp Suite详细使⽤教程
Burp Suite详细使⽤教程-Intruder模块详解 最近迷上了burp suite 这个安全⼯具,百度了关于这个⼯具的教程还卖hno.本来准备买滴,但是⼤⽜太⾼傲了,所以没 ...
COJ 2105 submatrix
submatrix 难度级别: A: 编程语⾔:不限:运⾏时间限制:2000ms: 运⾏空间限制:131072KB: 代码长度限制:102400B 试题描述 ⼩A有⼀个N×M的矩阵,矩阵中1~N* ...
HDU 4868 Information Extraction(2014 多校联合第⼀场 H)
看到这道题时我的内⼼是奔溃的,没有了解过HTML,只能靠窝的渣渣英语⼀点⼀点翻译啊TT. Information Extraction 题意:(纯⼿⼯翻译,有些⽤词可能在html中不是⼀样的,还多包涵 ...
Pomelo的Protobuf
pomelo的protobuf实现,借助了javascript的动态性,使得应⽤程序可以在运⾏时解析proto⽂件,不需要进⾏proto⽂件的编译.pomelo的实现中,为了更⽅便地解析proto⽂件 ...
DllImport ⾃动选择x64或x86 dll
前⾔ 标题不知道怎么确切地命名,在的托管世界⾥,有时不得不使⽤c的某个动态库,⽐如ocr.opencv等,如果幸运,有前⼈已经包装出版本,但有些不⾮常流⾏的库,只能⾃⼰使⽤pinvok ...
【BZOJ2434】阿狸的打字机(AC⾃动机,树状数组)
[BZOJ2434]阿狸的打字机(AC⾃动机,树状数组) 先写个暴⼒: 每次打印出字符串后,就插⼊到\(Trie\)树中 搞完后直接搭\(AC\)⾃动机 看⼀看匹配是怎么样的: 每次沿着\(AC\)⾃ ...
Nginx的虚拟主机配置
虚拟主机技术能够让同⼀台服务器.同⼀组Nginx进程上运⾏多个⽹站,降低了资⾦和服务器资源的损耗.Nginx可以配置三种类型的虚拟主机,本⽂就是主要介绍这三种虚拟主机配置⽅式. 配置基于IP的虚拟主机 ...
初识 go 语⾔:语法
⽬录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前⾔: go语⾔系列第⼆篇,主要讲述go语⾔的语法,如循环,if判断,swich语句,defer语句, ...
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论