В Java, как проверить, состоит ли строка из букв и цифр, но только из букв и цифр? - PullRequest
0 голосов
/ 18 января 2019

Я пробовал это:

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

, но вход 123f45 все еще не устанавливает токен в действительный, как я думал, что это будет

Ответы [ 4 ]

0 голосов
/ 18 января 2019

Простое регулярное выражение выполнит эту работу:

Измените свою функцию на:

private static void isLetterandNumberCombo(Tokens token) {
  token.setValid(token.getContents() != null && token.getContents().matches("[a-zA-Z0-9]+"));
}
0 голосов
/ 18 января 2019

Ваше решение в порядке. Вам просто нужно добавить регистр без учета регистра ((?i)), чтобы соответствовать строчным буквам. И matches() ищет полное совпадение, поэтому вам не нужны якоря в начале и в конце:

(?i)(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+
0 голосов
/ 18 января 2019

Я бы пошел с:

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

Идея состоит в том, что допустимая строка будет иметь либо букву, за которой следует число, либо где-то противоположное, а также другие необязательные буквы или цифры до или после.

0 голосов
/ 18 января 2019

Дайте этому водовороту

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, если токен действителен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...