Как использовать регулярные выражения для проверки нескольких условий в JAVA? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть String как вход, который имеет несколько условий для прохождения ниже.

Это строка длиной 8 и содержит все числа. Требование к методу должно возвращать false, если выполняется любое из следующих 4 условий.

First two characters -  13, 24, 28

characters three and four - 55, 99

characters five and six - 20, 21 

last two characters - 42, 38, 09, 17, 66

Как я могу проверить это, используя регулярное выражение вместо разбиения на 4 строки и проверки.

Спасибо в заранее.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Согласно вашему вопросу, строка состоит из ди git или нет, это не ясно. Если строка состоит из всех di git, попробуйте следующее: *
(^(13|24|28)\\d{6}$)|(^\\d{2}(55|99)\\d{4}$)|(^\\d{4}(20|21)\\d{2}$)|(^\\d{6}(42|38|09|17|66)$)

String text = "12345678";
        if (text.matches("(^(13|24|28)\\d{6}$)|(^\\d{2}(55|99)\\d{4}$)|(^\\d{4}(20|21)\\d{2}$)|(^\\d{6}(42|38|09|17|66)$)")) {
            System.out.println("Inalid");
        } else if(text.matches("^\\d{8}$")){
            System.out.println("Valid");
        } else {
            System.out.println("Invalid");
        }

Объяснение:

  • ^ (13 | 24 | 28) \ d {6} $) - соответствует первым двум di git && \ d {6} означает, что следующие 6 символов - это любые di git ..

  • (^ \ d {2} (55 | 99) \ d {4} $) - \ d {2} означает первые два, если di git && соответствует 3-му и 4-му di git с условием .. \ d {4} последние 4 символа означают любой ди git ..

Демо здесь, чтобы проверить совпадение или несоответствие ...

0 голосов
/ 27 апреля 2020

Одним из способов будет использование группы совпадений, поэтому (a|b) будет соответствовать либо на a, либо на b.

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

^((13|24|28).{6}|.{2}(55|99).{4}|.{4}(20|21).{2}|.{6}(42|38|09|17|66))$

Что вы могли бы использовать в java с классами Pattern и Matcher.

if (value.length() != 8) {
    return false;
} else {
    String patternString = "^((13|24|28).{6}|.{2}(55|99.).{4}|.{4}(20|21).{2}|.{6}(42|38|09|17|66))$";

    Pattern pattern = Pattern.compile(patternString);

    Matcher matcher = pattern.matcher(value);
    boolean matches = matcher.matches();

    return !matches;
}

Что касается длины строки, я не вижу хорошего способа проверить это в обычном выражение. Так что просто проверьте его с помощью оператора if-else.

Но убедитесь, что шаблон ie компилируется только один раз, если он вам нужен несколько раз.

Также для создания регулярного выражения я бы предложил используя веб-сайт, например regex101 или regexr .

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