Соответствие одному десятичному знаку в Java с использованием регулярных выражений - PullRequest
1 голос
/ 29 мая 2011

Надеюсь, быстрый вопрос. Я пытаюсь подтвердить двойной. Убедиться, что он положителен с точностью до одного знака после запятой.

Хорошие значения: 0,1, 2,5, 100,1, 1, 54
Неверные значения: -0,1, 1,123, 1,12, abc, 00012,1

Итак, я попробовал Regex здесь:

 public boolean isValidAge(String doubleNumber)
{
    DoubleValidator doubleValidator = new DoubleValidator();
    return doubleValidator.isValid(doubleNumber,"*[0-9]\\\\.[0-9]");
}

Я также пробовал: "*[0-9].[0-9]", "\\\\d+(\\\\.\\\\d{1})?", "[0-9]+(\\\\.[0-9]?)?"

Кажется, ничего не работает. Я использовал org.apache.commons.validator.routines.DoubleValidator

Есть ли другой способ, которым я могу сделать это по любой причине, почему эти регулярные выражения не работают? Мне не нужно использовать регулярные выражения.

Спасибо

Ответы [ 3 ]

8 голосов
/ 29 мая 2011

Это будет совпадать с числом и только числом с многозначным числом до-десятичной точки без начального нуля (-ов) или просто с нулем и, возможно, десятичной точкой с одной десятичной цифрой. Включает совпадение начала / конца строки, поэтому оно не будет совпадать с числом в большей строке ( обновлено, чтобы не принимать начальные нули, credit @Nicklas A ):

^([1-9]\d*|0)(\.\d)?$

Вместо этого используйте библиотеку java.util.regex.Pattern.

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

Поскольку вы помещаете регулярное выражение в строку, обязательно избегайте обратной косой черты

"^([1-9]\\d*|0)(\\.\\d)?$"

Я рекомендую вам прочитать здесь регулярные выражения, они являются важным инструментом, так сказать, «под вашим поясом».

http://www.regular -expressions.info /

3 голосов
/ 29 мая 2011
Pattern.compile ("[0-9]+\\.[0-9])").matcher (doubleNumber).matches ()

сработает.
Если вы также хотите, чтобы не было десятичной точки:

Pattern.compile ("[0-9]+(\\.[0-9])?").matcher (doubleNumber).matches ()

РЕДАКТИРОВАТЬ: после вашего комментария об отсутствии начальных нулей ицелое число в порядке:

Pattern.compile("([1-9][0-9]*|[0-9])(\\.[0-9])?").matcher(doubleNumber).matches()
0 голосов
/ 17 февраля 2015

, если вам нужно проверить десятичность с точками, запятыми, положительными и отрицательными значениями:

Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+([\\.\\,]{1}[0-9]{1}){0,1}$", (CharSequence) testObject);

Удачи.

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