在Java中,如何检查字符串是否同时包含字母和数字,但仅包含字母和数字?

时间:2019-01-17 23:53:41

标签: java regex

我尝试过:

private static void isLetterandNumberCombo(Tokens token) {
    if (token.getContents().matches("^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+$")){
        token.setValid(false);
    }
} 

但是输入123f45仍然没有像我想的那样将令牌设置为有效

4 个答案:

答案 0 :(得分:2)

您的解决方案很好。您只需要添加不区分大小写的标志((?i))即可匹配小写字母。并且matches()寻找完全匹配,因此您不需要在开头和结尾处使用定位符:

(?i)(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+

答案 1 :(得分:1)

旋转一下

private static boolean isLetterandNumberCombo(Tokens token) {
    String regex = "^[a-zA-Z0-9]+$";
    Pattern pattern = Pattern.compile(regex);

    return pattern.matcher(token.getContents()).matches();
}

如果令牌有效,您将返回true或false。

答案 2 :(得分:0)

我会选择:

^[A-Za-z\d]*(([A-Za-z]\d)|(\d[A-Za-z]))[A-Za-z\d]*$

这个想法是,一个有效的字符串将在其后跟一个字母,后跟一个数字或相反的数字,以及其他可选的字母或数字。

答案 3 :(得分:-1)

一个简单的正则表达式就可以完成这项工作:

将功能更改为:

private static void isLetterandNumberCombo(Tokens token) {
  token.setValid(token.getContents() != null && token.getContents().matches("[a-zA-Z0-9]+"));
}