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, если входная строка содержит пробелы или заглавные буквы.