Регулярное выражение: заменяет все недопустимые символы на пустую строку - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь создать шаблон регулярного выражения для замены всех недопустимых символов.

До десятичной точки и после десятичной точки у меня может быть любое число, например: 0,0, 1,0, 150,0, 129 000, 200.999 и т. Д. *

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

"\\d+(\\.\\d+)*"

Но я хочу создать шаблон регулярных выражений, который я могу использовать для проверкидесятичное число и замените все недопустимые символы или неожиданные, используя string.replaceAll("regex", value);.

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

String[] values = {
    "0", // return 0 - valid
    "0.", // return 0. - valid
    "0.0", // return 0.0 - valid
    "0.0.", // return 0.0 - invalid, because we dont expect another decimal point
    "0.00", // return 0.00 - valid
    "0.00.", // return 0.00 - invalid, because we dont expect antoher decimal point
    "0.000", // return 0.000 - valid
    // etc.
    "10.000.", // return 10.000, this case should not be possible to enter because we dont want 2 decimal point so number like  10.000.00 should not be possible
    "0.0/", // return 0.0, invalid -- any kind of character will be replaced with empty
    "0.0@", // return 0.0, invalid -- any kind of character will be replaced with empty
};

1 Ответ

1 голос
/ 28 марта 2019

Вы можете использовать регулярное выражение \D*(\d+\.?\d*)\D* и заменить его первой группой $1 (ваш действительный номер).Используйте это в методе findValid():

public String findValid(String value) {
    return value.replaceAll("\\D*(\\d+\\.?\\d*)\\D*", "$1");
}

Теперь вы можете использовать это, чтобы найти действительное число для значения.Чтобы проверить, является ли введенное значение действительным, вы можете проверить, равно ли входное значение:

Arrays.stream(values)
        .forEach(s -> {
            String valid = findValid(s);
            System.out.println(s + " => " + valid + " (" + (valid.equals(s) ? "valid" : "invalid") + ")");
        });

. Это выведет:

0 => 0 (valid)
0. => 0. (valid)
0.0 => 0.0 (valid)
0.0. => 0.0 (invalid)
0.00 => 0.00 (valid)
0.00. => 0.00 (invalid)
0.000 => 0.000 (valid)
10.000. => 10.000 (invalid)
0.0/ => 0.0 (invalid)
0.0@ => 0.0 (invalid)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...