Регулярное выражение (RegExp): как сделать проверку на корректность введённой суммы?

Для проверки корректности введённой суммы с помощью регулярных выражений в Java можно использовать следующий шаблон:

String regex = "^\$?\d+(\.\d{1,2})?$";

Давайте разберём этот шаблон по частям:

- ^ - указывает на начало строки.
- \$? - соответствует знаку доллара ($), который может быть опциональным (? указывает на наличие 0 или 1 символа). Экранирующий символ используется для того, чтобы знак доллара рассматривался как символ, а не как специальный символ регулярного выражения.
- \d+ - соответствует одной или более цифр.
- (\.\d{1,2})? - это группа, которая соответствует десятичной части суммы. Внутри группы:
- \. - соответствует точке (символ экранируется, потому что точка является специальным символом регулярных выражений).
- \d{1,2} - соответствует одной или двум цифрам после точки.
- ? - указывает на наличие 0 или 1 группы десятичной части.
- $ - указывает на конец строки.

Теперь мы можем использовать этот шаблон для проверки корректности введённой суммы, например, в методе isValidAmount:

import java.util.regex.Pattern;

public class AmountValidator {

    private static final String REGEX = "^\$?\d+(\.\d{1,2})?$";
    private static final Pattern PATTERN = Pattern.compile(REGEX);

    public static boolean isValidAmount(String input) {
        return PATTERN.matcher(input).matches();
    }

    public static void main(String[] args) {
        String[] amounts = {"$100", "50.25", "1.5", "$10.123", "abc"};

        for (String amount : amounts) {
            System.out.println(amount + " is valid: " + isValidAmount(amount));
        }
    }
}

В этом примере, мы имеем метод isValidAmount, который принимает строку input и возвращает значение true, если входная строка является корректной суммой, и false в противном случае. Мы используем статическое поле PATTERN для скомпилированного шаблона и метод matcher(input) класса Pattern для создания объекта Matcher, который мы использовали для выполнения заданного шаблона на входной строке. Затем мы используем метод matches() класса Matcher, чтобы проверить, соответствует ли весь ввод заданному шаблону.

Результат выполнения данного примера будет следующим:

$100 is valid: true
50.25 is valid: true
1.5 is valid: true
$10.123 is valid: false
abc is valid: false

В результате мы видим, что все корректные суммы ($100, 50.25, 1.5) проходят проверку, в то время как некорректные ($10.123, abc) оказываются невалидными.