Регулярное совпадение также отрицательные десятичные числа - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть следующее регулярное выражение, которое я использую для сопоставления / проверки десятичных чисел:

String[] inputs = {
    "0",
    "0.0",
    "0.1",
    "-0.1",
    "-0.123",
    "-123.123",
};
final String REG_PATTERN_VALID_DECIMAL_NUMBER = "((?<!\\S)\\d+(?:\\.\\d+)?(?!\\S))|.";
for (String input : inputs) {
    boolean validInput = input.matches(REG_PATTERN_VALID_DECIMAL_NUMBER);
    System.out.println("input: " + input + " ; isValid: " + validInput);
}

Вывод:

input: 0 ; isValid: true
input: 0.0 ; isValid: true
input: 0.1 ; isValid: true
input: -0.1 ; isValid: false
input: -0.123 ; isValid: false
input: -123.123 ; isValid: false

Таким образом, все положительные числа проходят, кроме отрицательных.Как я могу расширить свое регулярное выражение, чтобы принять также отрицательное число, например.принять первый символ "-"?

Ответы [ 3 ]

1 голос
/ 23 апреля 2019

Вам не нужно, чтобы существующее регулярное выражение совпадало с положительным / отрицательным десятичным знаком. Вам просто нужно добавить -? перед вашим шаблоном, чтобы соответствовать 1 или нулю '-'.

final String REG_PATTERN_VALID_DECIMAL_NUMBER = "-?\\d+(?:\\.\\d+)?";
1 голос
/ 23 апреля 2019

Если вы добавите необязательный символ - он должен работать:

final String REG_PATTERN_VALID_DECIMAL_NUMBER = "((?<!\\S)-?\\d+(?:\\.\\d+)?(?!\\S))|.";
1 голос
/ 23 апреля 2019

Шаблон не должен быть таким сложным, попробуйте это:

^-?\d+(\.\d+)?$

-? - это деталь, которая соответствует как со знаком -, так и без него. ? означает 1 или 0 вхождений.

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