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

新手上路,请多包涵

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

仅当字符串同时包含 AZ 和 0-9 时,它才应为真。

这是我尝试过的:

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

这没用。

原文由 Lucky 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 518
2 个回答

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

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

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

原文由 nhahtdh 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 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);
}

原文由 jahroy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题