我尝试过:
private static void isLetterandNumberCombo(Tokens token) {
if (token.getContents().matches("^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+$")){
token.setValid(false);
}
}
但是输入123f45仍然没有像我想的那样将令牌设置为有效
答案 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]+"));
}