Java регулярное выражение для поиска пробелов или символов в верхнем регистре

У меня есть метод, который проверяет строку и гарантирует, что она не имеет пробелов или символов в верхнем регистре:

boolean validate(String input) {
    if(input.matches(".*\\S.*([A-Z]+)")) {
        return false;
    }

    return true;
}

К сожалению, когда я запускаю это, это просто не работает. Он не генерирует никаких исключений, он просто позволяет всем входным строкам ("HelloWorld", "Hello World", "Hello world" и т. Д.) Пройти проверку. Есть идеи, где я иду не так?

3 ответа

Решение

Ты можешь использовать .matches("[^A-Z\\s]+")

Он вернет true, если ваша строка не содержит символов верхнего регистра или пробелов.

объяснение

бит между [...] называется классом символов, он соответствует всем предоставленным символам

  • ^ делает его отрицательным, поэтому он соответствует всему, что не предусмотрено
  • A-Z диапазон символов верхнего регистра
  • \\s короткая рука для любого символа пробела
  • + гарантирует, что ваша строка не менее 1 символа или более.

Самое простое регулярное выражение для соответствия пробелу или заглавным буквам:

.*[A-Z\s].*

Если какой-либо один такой символ лишит законной силы ввод, тогда это будет работать хорошо.

Обычно я бы бросил .* в начале и в конце, но Java String#matches() должен совпадать со всей строкой, иначе не получится, в отличие от популярного =~ оператор в динамических языках, который будет соответствовать любой подстроке.

Измените свой код на,

boolean validate(String input) {
    if(input.matches(".*?[A-Z\\s].*")) {
        return false;
    }

    return true;
}

Так как matches Функция пытается сопоставить всю строку, вам не нужно идти на якоря. Приведенный выше код вернет false, если входная строка содержит пробелы или заглавные буквы.

Другие вопросы по тегам