判断密码是否包含键盘连续字符【灭霸级】

为了安全,有的有修改密码校验要求,密码不能是键盘上了连续的3个及以上字符,无论横着的(qwe或者ewq)还是竖着的(qaz或者zaq)。以下主要参考博客:https://blog.csdn.net/chenlycly/article/details/90692006
也算站在了这位仁兄的肩膀上了吧,谢谢。皮一下~。

功能详述:可进行密码是否包含键盘列连续或行连续检测,密码长度小于等于8位不能键盘连续3个及以上字母,数字,特殊字符,9位不能键盘连续4个但是可以连续3个,10位不可键盘连续5个但能4个,依次类推。

1. 原理:

用两个与传入密码长度相等的一维数组(Row行数组,Column列数组)
按密码顺序在二维键盘数组中查找每个字符,找到了则用
一维行列数组分别存放密码中每个字符的行号和列号
然后循环分析行号和列号是否满足二维键盘数组的值来判断是否连续

2. 实现代码

BOOL IsKeyBoardContinuousChar( LPCTSTR lpStr )
{
	if ( lpStr == NULL || _tcslen(lpStr) == 0 )
	{
		return FALSE;
	}
	// 注意,下面的键盘字符表都只列出小写字符,判断前会将输入字符中的
	// 大写字母都转换成小写字母
	// 非shift键盘字符表
	TCHAR aaCharTable1[4][13] =
	{ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\0',
	  'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Java正则表达式是一种用于匹配字符串的强大工具,它可以通过一系列的规则进行字符串的匹配。判断密码是否包含大小写、数字、特殊字符可以使用正则表达式来实现。 首先,我们可以使用正则表达式中的字符类来匹配大小写字母和数字。字符类可以用方括号[]括起来表示,例如[abc]匹配a、b、c中的任意一个字符。 同时,我们也可以使用正则表达式中的特殊字符来匹配特殊字符。特殊字符可以用反斜杠\表示,例如\d匹配任意一个数字,\W匹配任意一个非字母、数字或下划线字符。 因此,对于一个密码,我们可以通过以下的正则表达式来判断是否包含大小写字母、数字和特殊字符: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W)[^]{8,16}$ 其中,^表示匹配字符串的开头,$表示匹配字符串的结尾。.*表示匹配任意数量的字符,(?=.*[a-z])表示必须包含至少一个小写字母,(?=.*[A-Z])表示必须包含至少一个大写字母,(?=.*\d)表示必须包含至少一个数字,(?=.*\W)表示必须包含至少一个特殊字符。[^]{8,16}表示字符串长度必须在8到16之间,且可以包含任意字符。 因此,使用以上的正则表达式可以快速判断一个密码是否包含大小写字母、数字和特殊字符,以确保密码的安全性。 ### 回答2: Java正则表达式是用于处理文本匹配和替换的强大工具。在判断密码是否包含大小写、数字、特殊字符时,可以使用正则表达式的字符类来实现。 在Java中,使用Pattern类和Matcher类来处理正则表达式。下面是一个示例代码,用正则表达式判断密码是否包含大小写、数字、特殊字符: ``` import java.util.regex.*; public class PasswordValidator { public static boolean validate(String password) { // 定义正则表达式 String pattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"; // 编译正则表达式 Pattern p = Pattern.compile(pattern); // 匹配字符串 Matcher m = p.matcher(password); // 返回匹配结果 return m.matches(); } public static void main(String[] args) { String[] passwords = {"mypassword123", "MyPassword123!", "12345678", "mypassword"}; for (String password : passwords) { System.out.println(password + ": " + validate(password)); } } } ``` 在上述示例中,正则表达式`"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"`解释如下: - `^` 表示字符串的开头 - `(?=.*[a-z])` 表示必须包含小写字母 - `(?=.*[A-Z])` 表示必须包含大写字母 - `(?=.*\\d)` 表示必须包含数字 - `(?=.*[@$!%*?&])` 表示必须包含特殊字符(@、$、!、%、*、?、&) - `[A-Za-z\\d@$!%*?&]{8,}` 表示密码必须由大小写字母、数字、特殊字符中的至少三种组成,且长度至少为8位 - `$` 表示字符串的结尾 根据上述正则表达式,密码必须符合以下要求: - 必须包含小写字母 - 必须包含大写字母 - 必须包含数字 - 必须包含特殊字符(@、$、!、%、*、?、&) - 必须由大小写字母、数字、特殊字符中的至少三种组成 - 长度至少为8位 在示例代码中,通过调用`validate`方法来判断密码是否符合上述要求。`validate`方法返回一个布尔值,表示密码是否匹配正则表达式。示例代码对几个密码进行了测试,并输出了测试结果。 总的来说,Java正则表达式是一个实现复杂字符串匹配的强大工具,可以方便地实现密码复杂度的判断。对于开发人员而言,在编写代码时使用正则表达式来进行格式校验,能够提高代码的可读性和可维护性。 ### 回答3: Java正则表达式提供了一种方便的方式来判断密码是否符合要求,比如是否包含大小写字母、数字以及特殊字符。通常来说,一个足够安全的密码应该包含以上三种要素中的至少两种。 首先,我们需要定义一个匹配密码要求的正则表达式。这个表达式可以使用[] 来定义一组字符,使用\来表示转义字符,因此以下是一个满足要求的正则表达式: ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$ 这个表达式包含若干个正则表达式,它们分别用来限定密码必须包含数字、小写字母、大写字母、特殊字符,以及密码的长度必须大于等于8个字符。 下面是一个Java代码片段,用来判断给定的密码是否符合要求: ``` public boolean validatePassword(String password) { String pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$"; return password.matches(pattern); } ``` 上面这个方法接收一个字符串作为参数,这个字符串表示要被检查的密码。它通过调用Java中的字符串方法matches来匹配给定的密码是否符合定义好的正则表达式。如果匹配成功,那么返回true,否则返回false。 总之,借助于Java正则表达式的强大功能,我们可以很方便地编写代码来检查密码是否符合要求。这种方法简单、快捷、可靠,值得大家借鉴和学习。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值