我需要一个能满足这两个条件的正则表达式.
只有当String包含AZ和0-9时,它才会给我真实.
这是我尝试过的:
if PNo[0].matches("^[A-Z0-9]+$")
这是行不通的.
nha*_*tdh 21
我怀疑下面的正则表达式会因为环顾四周而减慢,但无论如何都应该可行:
.matches("^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+$")
Run Code Online (Sandbox Code Playgroud)
正则表达式断言(?=.*[A-Z])字符串中某处有一个大写字母字符,并断言字符串中有一个数字(?=.*[0-9]),然后检查一切是字母字符还是数字.
jah*_*roy 18
如果使用两个单独的正则表达式,则更容易编写和读取:
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);
}
Run Code Online (Sandbox Code Playgroud)
更好的是,写一个方法:
public boolean isValid(String s) {
String n = ".*[0-9].*";
String a = ".*[A-Z].*";
return s.matches(n) && s.matches(a);
}
Run Code Online (Sandbox Code Playgroud)
字母可以在数字之前或之后,因此该表达式应该起作用:
(([A-Z].*[0-9])|([0-9].*[A-Z]))
Run Code Online (Sandbox Code Playgroud)
以下是使用此表达式的代码示例:
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);
Run Code Online (Sandbox Code Playgroud)
基本:
匹配当前字符串行: .
匹配 0 或任意数量的任何字符: *
匹配当前行中的任何内容: .*
匹配字符集(范围)中的任何字符: [start-end]
匹配一组正则表达式之一: (regex1|regex2|regex3)
请注意,开始和结束来自 ASCII 顺序,开始必须在结束之前。例如你可以做[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]")
这应该可以解决您的问题:
^([A-Z]+[0-9][A-Z0-9]*)|([0-9]+[A-Z][A-Z0-9]*)$
Run Code Online (Sandbox Code Playgroud)
但它是不可读的。我建议首先使用“^[A-Z0-9]+$”检查输入,然后使用“[AZ]”检查以确保它至少包含一个字母,然后使用“[0-9]”检查以确保它至少包含一位数字。通过这种方式,您可以轻松添加新的限制,并且代码将保持可读性。
| 归档时间: |
|
| 查看次数: |
51530 次 |
| 最近记录: |