java 正则表达式_a-z_0-9 validation_Java Regex Password Validation Example

申屠健
2023-12-01

当今几乎所有应用程序都需要Password validation 。 通过手动编写所有内容以使用第三方可用的API,可以通过多种方法来验证密码。 在此Java regex密码验证教程中 ,我们正在使用regular expressions构建password validator 。

1. Regex for password validation((?=.*[a-z])(?=.*d)(?=.*[@#$%])(?=.*[A-Z]).{6,16})

上面的正则表达式有以下几节:(?=.*[a-z])  : This matches the presence of at least one lowercase letter.

(?=.*d)     : This matches the presence of at least one digit i.e. 0-9.

(?=.*[@#$%]) : This matches the presence of at least one special character.

((?=.*[A-Z]) : This matches the presence of at least one capital letter.

{6,16}       : This limits the length of password from minimum 6 letters to maximum 16 letters.

前4个部分的顺序可以更改,甚至可以从最终正则表达式中删除。 这个事实可以用来以编程方式构建我们的密码验证器。

2. Java program to validate password using regex

我们正在使验证器可配置,以便可以根据需要设置限制。 就像我们要强制使用至少一个特殊字符而不是任何大写字母一样,我们可以相应地传递所需的参数。package com.howtodoinjava.regex;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class PasswordValidator

{

private static PasswordValidator INSTANCE = new PasswordValidator();

private static String pattern = null;

/**

* No one can make a direct instance

* */

private PasswordValidator()

{

//do nothing

}

/**

* Force the user to build a validator using this way only

* */

public static PasswordValidator buildValidator( boolean forceSpecialChar,

boolean forceCapitalLetter,

boolean forceNumber,

int minLength,

int maxLength)

{

StringBuilder patternBuilder = new StringBuilder("((?=.*[a-z])");

if (forceSpecialChar)

{

patternBuilder.append("(?=.*[@#$%])");

}

if (forceCapitalLetter)

{

patternBuilder.append("(?=.*[A-Z])");

}

if (forceNumber)

{

patternBuilder.append("(?=.*d)");

}

patternBuilder.append(".{" + minLength + "," + maxLength + "})");

pattern = patternBuilder.toString();

return INSTANCE;

}

/**

* Here we will validate the password

* */

public static boolean validatePassword(final String password)

{

Pattern p = Pattern.compile(pattern);

Matcher m = p.matcher(password);

return m.matches();

}

}

3. Unit test password validation

因此,我们的密码验证程序已准备就绪。 让我们用一些JUnit测试用例进行测试。package com.howtodoinjava.regex;

import junit.framework.Assert;

import org.junit.Test;

@SuppressWarnings("static-access")

public class TestPasswordValidator

{

@Test

public void testNormalPassword()

{

PasswordValidator validator = PasswordValidator.buildValidator(false, false, false, 6, 14);

Assert.assertTrue(validator.validatePassword("howtodoinjava"));

Assert.assertTrue(validator.validatePassword("howtodoin"));

//Sort on length

Assert.assertFalse(validator.validatePassword("howto"));

}

@Test

public void testForceNumeric()

{

PasswordValidator validator = PasswordValidator.buildValidator(false,false, true, 6, 16);

//Contains numeric

Assert.assertTrue(validator.validatePassword("howtodoinjava12"));

Assert.assertTrue(validator.validatePassword("34howtodoinjava"));

Assert.assertTrue(validator.validatePassword("howtodo56injava"));

//No numeric

Assert.assertFalse(validator.validatePassword("howtodoinjava"));

}

@Test

public void testForceCapitalLetter()

{

PasswordValidator validator = PasswordValidator.buildValidator(false,true, false, 6, 16);

//Contains capitals

Assert.assertTrue(validator.validatePassword("howtodoinjavA"));

Assert.assertTrue(validator.validatePassword("Howtodoinjava"));

Assert.assertTrue(validator.validatePassword("howtodOInjava"));

//No capital letter

Assert.assertFalse(validator.validatePassword("howtodoinjava"));

}

@Test

public void testForceSpecialCharacter()

{

PasswordValidator validator = PasswordValidator.buildValidator(true,false, false, 6, 16);

//Contains special char

Assert.assertTrue(validator.validatePassword("howtod@injava"));

Assert.assertTrue(validator.validatePassword("@Howtodoinjava"));

Assert.assertTrue(validator.validatePassword("howtodOInjava@"));

//No special char

Assert.assertFalse(validator.validatePassword("howtodoinjava"));

}

}

在这篇文章中,我们学习了使用Java正则表达式进行密码验证的方法,该规则能够验证字母数字和特殊字符,包括最大和最小密码长度。

 类似资料: