Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式Java:8个字符长,至少2位,仅字母数字_Java_Regex - Fatal编程技术网

正则表达式Java:8个字符长,至少2位,仅字母数字

正则表达式Java:8个字符长,至少2位,仅字母数字,java,regex,Java,Regex,需要一些帮助来制作一个至少支持8个字符、至少2个数字、仅支持字母数字的表达式吗 这就是我尝试过的: ^((?=.*\\d){2})[a-zA-Z0-9]{8,}$ 这些字符串应通过: Abjh23af 879789765 legoF111 这些字符串不应通过: Danrad1d = Only contain one digit FFJURi22@ = Contain a @ symbols aj22b34 = String is less then 8 你能行 example.matche

需要一些帮助来制作一个至少支持8个字符、至少2个数字、仅支持字母数字的表达式吗

这就是我尝试过的:

^((?=.*\\d){2})[a-zA-Z0-9]{8,}$
这些字符串应通过:

Abjh23af
879789765
legoF111
这些字符串不应通过:

Danrad1d = Only contain one digit
FFJURi22@ = Contain a @ symbols
aj22b34 = String is less then 8
你能行

example.matches("\\w*(\\d\\w*){2}")
此代码

String[] examples = ("Abjh23af\n" +
        "879789765\n" +
        "legoF111\n" +
        "Danrad1d = Only contain one digit\n" +
        "FFJURi22@ = Contain a @ symbols\n" +
        "aj22b34 = String is less then 8").split("\n");
for (String example : examples) {
    System.out.println(example + " - " + example.matches("\\w*(\\d\\w*){2}"));
}
印刷品

Abjh23af - true
879789765 - true
legoF111 - true
Danrad1d = Only contain one digit - false
FFJURi22@ = Contain a @ symbols - false
aj22b34 = String is less then 8 - false

尝试从以下位置更改正则表达式字符串:

((?=.*\\d){2})[a-zA-Z0-9]{8,}
致:

只需移动一个右括号。但是仍然有一个小错误,只有当两个数字是连续的时才会通过。需要再添加一对括号

((?=(.*\\d){2})[a-zA-Z0-9]{8,})
完成(在末尾添加一个测试用例,以说明需要添加一对括号):


为什么要使用正则表达式?在没有输入的情况下验证输入非常容易。@ILoveCoding,我想知道在基本Java中不使用regrex如何进行验证,用charecter测试字符串是没有效率的,regrex将为我们做这件事easily@ILoveCoding,在没有正则表达式的情况下如何验证?我相信正则表达式是最简单的方法。仍然不能正常工作,仍然传递少于8个字符的字符串。您的
示例
变量后面包含解释
=…
,因此测试结果没有任何意义
((?=(.*\\d){2})[a-zA-Z0-9]{8,})
public class PasswordValidator {

  private static final int MAX_LENGTH = 20;
  private static final String PASSWORD_PATTERN = String.format(
      "((?=(.*\\d){2})[a-zA-Z0-9]{8,%d})", MAX_LENGTH);

  private Pattern pattern;
  private Matcher matcher;

  public PasswordValidator() {
    pattern = Pattern.compile(PASSWORD_PATTERN);
  }

  public boolean validate(final String password) {
    matcher = pattern.matcher(password);
    return matcher.matches();
  }

  public static void main(String[] args) {
    PasswordValidator pv = new PasswordValidator();
    System.out.println(pv.validate("Abjh23af")); // pass
    System.out.println(pv.validate("879789765")); // pass
    System.out.println(pv.validate("legoF111")); // pass
    System.out.println(pv.validate("Danrad1d")); // fail
    System.out.println(pv.validate("FFJURi22@")); // fail
    System.out.println(pv.validate("aj22b34")); // fail
    System.out.println(pv.validate("1abcdef2")); // pass (thanks to extra parenthesis)
  }
}