我正在尝试查看字符串是否至少包含数字或小写或大写。
我写过这样的话:
int combinations = 0;
string pass = "!!!AAabas1";
if (pass.matches("[0-9]")) {
combinations = combinations + 10;
}
if (pass.matches("[a-z]")) {
combinations =combinations + 26;
}
if (pass.matches("[A-Z]")) {
combinations =combinations + 26;
}
然而,我不明白为什么我不能得到组合去36。他们只是保持在0.我做错了什么?
答案 0 :(得分:12)
您可以使用Pattern,我认为“matches”方法会查找整个字符串以匹配正则表达式。
尝试下一个代码:
int combinations = 0;
String pass = "!!AAabas1";
if (Pattern.compile("[0-9]").matcher(pass).find()) {
combinations = combinations + 10;
}
if (Pattern.compile("[a-z]").matcher(pass).find()) {
combinations = combinations + 26;
}
if (Pattern.compile("[A-Z]").matcher(pass).find()) {
combinations = combinations + 26;
}
答案 1 :(得分:4)
这是我的尝试。注意,这使用unicode类别进行验证,因此非拉丁语言友好。
import java.util.regex.Pattern;
public class PasswordValidator {
public static void main(String[] args) {
final PasswordValidator passwordValidator = new PasswordValidator();
for (String password : new String[] { "abc", "abc123", "ABC123", "abc123ABC", "!!!AAabas1", "гшщз",
"гшщзЧСМИ22" }) {
System.out.printf("Password '%s' is %s%n", password, passwordValidator.isValidPassword(password) ? "ok"
: "INVALID");
}
}
private static final Pattern LOWER_CASE = Pattern.compile("\\p{Lu}");
private static final Pattern UPPER_CASE = Pattern.compile("\\p{Ll}");
private static final Pattern DECIMAL_DIGIT = Pattern.compile("\\p{Nd}");
/**
* Determine if a password is valid.
*
* <p>
* A password is considered valid if it contains:
* <ul>
* <li>At least one lower-case letter</li>
* <li>At least one upper-case letter</li>
* <li>At least one digit</li>
* </p>
*
* @param password
* password to validate
* @return True if the password is considered valid, otherwise false
*/
public boolean isValidPassword(final String password) {
return containsDigit(password) && containsLowerCase(password) && containsUpperCase(password);
}
private boolean containsDigit(final String str) {
return DECIMAL_DIGIT.matcher(str).find();
}
private boolean containsUpperCase(final String str) {
return UPPER_CASE.matcher(str).find();
}
private boolean containsLowerCase(final String str) {
return LOWER_CASE.matcher(str).find();
}
}
这是输出:
Password 'abc' is INVALID
Password 'abc123' is INVALID
Password 'ABC123' is INVALID
Password 'abc123ABC' is ok
Password '!!!AAabas1' is ok
Password 'гшщз' is INVALID
Password 'гшщзЧСМИ22' is ok
答案 2 :(得分:3)
答案 3 :(得分:1)
虽然使用正则表达式显然可行,但Guava的CharMatcher类可能更适合您要执行的操作:
if (CharMatcher.inRange('0', '9').matchesAnyOf(pass))
combinations += 10;
if (CharMatcher.inRange('a', 'z').matchesAnyOf(pass))
combinations += 26;
if (CharMatcher.inRange('A', 'Z').matchesAnyOf(pass))
combinations += 26;
答案 4 :(得分:1)
String str_rno = "CooL8";
boolean Flag = false;
String[] parts = str_rno.split("");
for (int i = 0; i < str_rno.length(); i++) {
String part1 = parts[i + 1];
if (Character.isDigit(str_rno.charAt(i))) {
System.out.println(" " + i + " " + part1 + " digit");
Flag = true;
} else {
System.out.println(" " + i + " " + part1 + " char ");
}
}
if(Flag==true){
Toast.makeText(getApplicationContext(),"String contain 1 digit",Toast.LENGTH_SHORT).show();
}
if(Flag==flase){
Toast.makeText(getApplicationContext(),"String not contain 1 digit",Toast.LENGTH_SHORT).show();
}