14

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

只有当一个字符串同时包含 AZ 和 0-9 时,它才应该给我真实的。

这是我尝试过的:

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

这没用。

4

7 回答 7

25

我怀疑下面的正则表达式会因环视而减慢,但无论如何它都应该起作用:

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

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

于 2012-07-18T02:33:55.863 回答
21

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

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);
}
于 2012-07-18T02:37:20.433 回答
7

一个字母可以在数字之前或之后,所以这个表达式应该有效:

(([A-Z].*[0-9])|([0-9].*[A-Z]))

下面是一个使用此表达式的代码示例:

Pattern p = Pattern.compile("(([A-Z].*[0-9])|([0-9].*[A-Z]))");
Matcher m = p.matcher("AXD123");
boolean b = m.find();
System.out.println(b);
于 2012-07-18T02:27:41.657 回答
7

这是适合您的正则表达式

基本:

匹配字符串的当前行:.

匹配 0 或任意数量的任意字符:*

匹配当前行中的任何内容:.*

匹配字符集(范围)中的任何字符:[start-end]

匹配组中的一个正则表达式:(regex1|regex2|regex3)

注意 start 和 end 来自 ASCII 顺序,并且 start 必须在 end 之前。比如你可以做[0-Z],但不能[Z-0]。这是供您参考的ASCII图表 在此处输入图像描述

根据正则表达式检查字符串

只需调用yourString.matches(theRegexAsString)

检查字符串是否包含字母:

检查是否有字母:yourString.matches(".*[a-zA-Z].*")

检查是否有小写字母:yourString.matches(".*[a-z].*")

检查是否有大写字母:yourString.matches(".*[A-Z].*")

检查字符串是否包含数字:

yourString.matches(".*[0-9].*")

检查字符串是否同时包含数字和字母:

最简单的方法是用字母和数字匹配两次

yourString.matches(".*[a-zA-Z].*") && yourString.matches(".*[0-9].*")

如果您希望将所有内容都匹配在一起,则正则表达式将类似于:匹配在某个地方有一个字符的字符串,然后在任何位置都有一个数字,或者反过来。所以你的正则表达式将是:

yourString.matches(".*([a-zA-Z].*[0-9]|[0-9].*[a-zA-Z]).*")

额外的正则表达式供您参考:

检查字符串是否带有字母

yourString.matches("[a-zA-Z].*")

检查字符串是否以数字结尾

yourString.matches(".*[0-9]")

于 2017-11-27T20:37:42.413 回答
5

这应该可以解决您的问题:

^([A-Z]+[0-9][A-Z0-9]*)|([0-9]+[A-Z][A-Z0-9]*)$

但它是不可读的。我建议先用“^[A-Z0-9]+$”检查输入,然后用“[AZ]”检查以确保它至少包含一个字母,然后用“[0-9]”检查以确保它至少包含一位数字。通过这种方式,您可以轻松添加新的限制,并且代码将保持可读性。

于 2012-07-18T02:28:20.147 回答
1

怎么样([A-Z].*[0-9]+)|([0-9].*[A-Z]+)

于 2012-07-18T02:28:18.443 回答
0

尝试使用 (([AZ]+[0-9])|([0-9]+[AZ])) 。它应该可以解决。

于 2019-04-29T13:42:09.600 回答