Java - 如何测试字符串是否同时包含字母和数字

2022-09-03 16:25:24

我需要一个满足这两个条件的正则表达式。

只有当字符串同时包含 A-Z 和 0-9 时,它才应该给我 true。

以下是我尝试过的方法:

if PNo[0].matches("^[A-Z0-9]+$")

它不起作用。


答案 1

我怀疑下面的正则表达式被环顾四周的速度减慢了,但无论如何它都应该工作:

.matches("^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+$")

正则表达式断言字符串中的某个位置存在大写字母字符,并断言字符串中的某个位置有一个数字,然后检查所有内容是字母字符还是数字。(?=.*[A-Z])(?=.*[0-9])


答案 2

如果使用两个单独的正则表达式,则编写和阅读会更容易:

String s  =  "blah-FOO-test-1-2-3";

String numRegex   = ".*[0-9].*";
String alphaRegex = ".*[A-Z].*";

if (s.matches(numRegex) && s.matches(alphaRegex)) {
    System.out.println("Valid: " + input);
}

更好的是,写一个方法:

public boolean isValid(String s) {
    String n = ".*[0-9].*";
    String a = ".*[A-Z].*";
    return s.matches(n) && s.matches(a);
}