正则表达式生成随机密码包含大小写字母、数字和特殊字符

密码

//必须包含大小写字母、数字和特殊字符
String regex = "^(?=.*[A-Z])(?=.*[a-z])(?![0-9]+$)(?![^0-9]+$)(?![a-zA-Z]+$)(?![^a-zA-Z]+$)(?![a-zA-Z0-9]+$)[a-zA-Z0-9\\S]{8,16}$";
//必须包含大小写字母、数字和特殊字符任意三种
 public static final String PW_PATTERN = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,30}";
   static String regex_number = ".*\\d{1,}.*";// 数字  
    static String regex_lower = ".*[a-z]{1,}.*";// 小写字母  
    static String regex_upper = ".*[A-Z]{1,}.*";// 大写字母  
//    static String regex_char = ".*[~!@#$%^&*\\.?]{1,}.*";// 特殊字符  
//    static String regex_char = ".*[~!@#%^*.?]{1,}.*";// 特殊字符  
    static String regex_char = ".*[\\W_]{1,}.*";// 特殊字符  

import java.util.Random;
 
public class RandomPassword {
	public static void main(String[] args) {
 
		String password = getRandomPassword(8);
		System.out.println(password);
	}
	
	//获取验证过的随机密码
	public static String getRandomPassword(int len) {
		String result = null;
		
		/*if(len >= 6) {
			for(result = makeRandomPassword(len);len >= 6;result = makeRandomPassword(len)){				
				if (result.matches(".*[a-z]{1,}.*") && result.matches(".*[A-Z]{1,}.*") && result.matches(".*\\d{1,}.*") && result.matches(".*[~!@#$%^&*\\.?]{1,}.*")) {
					return result;
				} 
			}
		}*/
		while(len>=6){
			result = makeRandomPassword(len);
			if (result.matches(".*[a-z]{1,}.*") && result.matches(".*[A-Z]{1,}.*") && result.matches(".*\\d{1,}.*") && result.matches(".*[~!@#$%^&*\\.?]{1,}.*")) {
				return result;
			} 
			result = makeRandomPassword(len);
		}
		return "长度不得少于6位!";
	}
	//随机密码生成
	public static String makeRandomPassword(int len){
		char charr[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890~!@#$%^&*.?".toCharArray();
		//System.out.println("字符数组长度:" + charr.length);	//可以看到调用此方法多少次
		StringBuilder sb = new StringBuilder();
		Random r = new Random();
		
		for (int x = 0; x < len; ++x) {
			sb.append(charr[r.nextInt(charr.length)]);
		}
		return sb.toString();
	}
 
}

参考链接:随机生成的util

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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正则表达式的强大功能,我们可以很方便地编写代码来检查密码是否符合要求。这种方法简单、快捷、可靠,值得大家借鉴和学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值