无需重复字符序列的Passay密码
Passay password without repeating char sequence
我正在使用 passay 库根据要求列表验证密码:
<dependencies>
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
我的一个要求是密码不能有任何字符序列紧跟相同的序列。例如:
- apple:应该被拒绝,因为'p'后面跟着另一个'p'。
- banana:应该被拒绝,因为'an'后面跟着'an'。
- 123xy123:可以,因为“123”后没有紧跟“123”。
我尝试使用 RepeatCharactersRule
(javadocs),但该规则仅适用于相同字符的序列(它会找到 'aaa',但不会找到 'abab') .
passay 是否有执行此操作的任何规则,或者我是否必须编写自定义规则?
嗯,我认为不是,但你不必编写自己的规则,如果你想试试这个:
public class RepeatingSequenceRegexTest {
final PasswordValidator validator = new PasswordValidator(
new IllegalRegexRule("(.{1,})\1")
);
@Test
public void checks() {
assertTrue(validator.validate(new PasswordData("normal")).isValid());
assertTrue(validator.validate(new PasswordData("abcdef")).isValid());
assertTrue(validator.validate(new PasswordData("abacadaeaf")).isValid());
assertTrue(validator.validate(new PasswordData("xyzxy")).isValid());
assertTrue(validator.validate(new PasswordData("12345")).isValid());
assertTrue(validator.validate(new PasswordData("121314")).isValid());
assertTrue(validator.validate(new PasswordData("1234123121")).isValid());
assertTrue(validator.validate(new PasswordData("123xy123")).isValid());
assertTrue(validator.validate(new PasswordData("1")).isValid());
assertTrue(validator.validate(new PasswordData("")).isValid());
assertFalse(validator.validate(new PasswordData("apple")).isValid());
assertFalse(validator.validate(new PasswordData("banana")).isValid());
assertFalse(validator.validate(new PasswordData("112233")).isValid());
assertFalse(validator.validate(new PasswordData("123123")).isValid());
assertFalse(validator.validate(new PasswordData("1212")).isValid());
assertFalse(validator.validate(new PasswordData("11")).isValid());
assertFalse(validator.validate(new PasswordData("123xy123xy")).isValid());
}
}
我正在使用 passay 库根据要求列表验证密码:
<dependencies>
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
我的一个要求是密码不能有任何字符序列紧跟相同的序列。例如:
- apple:应该被拒绝,因为'p'后面跟着另一个'p'。
- banana:应该被拒绝,因为'an'后面跟着'an'。
- 123xy123:可以,因为“123”后没有紧跟“123”。
我尝试使用 RepeatCharactersRule
(javadocs),但该规则仅适用于相同字符的序列(它会找到 'aaa',但不会找到 'abab') .
passay 是否有执行此操作的任何规则,或者我是否必须编写自定义规则?
嗯,我认为不是,但你不必编写自己的规则,如果你想试试这个:
public class RepeatingSequenceRegexTest {
final PasswordValidator validator = new PasswordValidator(
new IllegalRegexRule("(.{1,})\1")
);
@Test
public void checks() {
assertTrue(validator.validate(new PasswordData("normal")).isValid());
assertTrue(validator.validate(new PasswordData("abcdef")).isValid());
assertTrue(validator.validate(new PasswordData("abacadaeaf")).isValid());
assertTrue(validator.validate(new PasswordData("xyzxy")).isValid());
assertTrue(validator.validate(new PasswordData("12345")).isValid());
assertTrue(validator.validate(new PasswordData("121314")).isValid());
assertTrue(validator.validate(new PasswordData("1234123121")).isValid());
assertTrue(validator.validate(new PasswordData("123xy123")).isValid());
assertTrue(validator.validate(new PasswordData("1")).isValid());
assertTrue(validator.validate(new PasswordData("")).isValid());
assertFalse(validator.validate(new PasswordData("apple")).isValid());
assertFalse(validator.validate(new PasswordData("banana")).isValid());
assertFalse(validator.validate(new PasswordData("112233")).isValid());
assertFalse(validator.validate(new PasswordData("123123")).isValid());
assertFalse(validator.validate(new PasswordData("1212")).isValid());
assertFalse(validator.validate(new PasswordData("11")).isValid());
assertFalse(validator.validate(new PasswordData("123xy123xy")).isValid());
}
}