Возникли проблемы с получением правильных регулярных выражений - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь завершить последнюю часть этого кода, но, похоже, не могу получить последние 2 оператора if, чтобы они были действительными, когда они должны.Второй должен отображаться, когда нет букв, цифр или тире (-).Третий должен убедиться, что 2 тире не являются последовательными и не в начале или в конце.Выражения должны быть неправильными, но я понятия не имею, как их исправить, пока еще плохо знакомых с регулярным выражением.Заранее спасибо за помощь!Вот что у меня есть ...

import java.util.Scanner;

public class VerifySerialBHarris {

    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);
        String text;
        String cha;


        System.out.println("Enter a Serial number: ");
        text=input.nextLine();

        if(text.matches("[A-Za-z0-9]+(-[A-Za-z0-9]+){2}")){
        System.out.println("Serial number "+text+" verification \nValid");
        System.out.println("Enter a wildchar character: ");
        cha=input.nextLine();
        text= text.replaceAll("[A-Za-z0-9]", cha);
        System.out.println("Masked serial: "+text);
    }
        if(text.matches(".[^-A-Za-z0-9].")) {
           System.out.println("Invalid. Serial should only contain letters, numbers, and dashes(-)"); 

       }

        if(text.matches("[^A-Za-z0-9]+(-[A-Za-z0-9]+)"))
        System.out.println("Invalid. There should be exactly 2 non-consecutive dashes in the middle. ");
}
}

Пример

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

У вас уже есть полный шаблон [A-Za-z0-9]+(-[A-Za-z0-9]+){2}, и может быть проще перечислить шаблон и вывести сообщение об ошибке, указывающее, что введенные данные не соответствуют требуемому шаблону.

Если вы хотитеОставьте отзыв для пользователя, проанализировав тип ошибки, которую вы сделали, и затем вы должны создать шаблон для всех типов ошибок, которые может сделать пользователь.Для кода, который я предлагаю использовать, например, структуру if else if, чтобы вы не получили сообщение об ошибке, пока шаблон правильный.

О втором и третьем шаблонах

Второй должен отображаться, когда нет букв, цифр или тире (-).

Второй шаблон .[^-A-Za-z0-9]. будет соответствовать 3 символам, где первый иlast может быть любым символом, кроме новой строки из-за точки, а также может совпадать с буквой или цифрой.

Чтобы не совпадать ни с цифрами, ни с тире, вы можете использовать:

.*[^-A-Za-z0-9].*

Третий должен убедиться, что 2 тире не являются последовательными и не находятся в начале или конце

Третий шаблон [^A-Za-z0-9]+(-[A-Za-z0-9]+) сначала соответствует тому, что не входит в класс символов из-задля отрицания с помощью [^ также можно сопоставить перенос, поскольку он не указан в списке, но не обязан.

Чтобы сопоставить этот шаблон, можно повторить дефис 1+ раз:

[A-Za-z0-9]+(-+[A-Za-z0-9]+){2,}

Обновлен Java cода

0 голосов
/ 07 февраля 2019

Ваш первый регулярное выражение, [A-Za-z0-9]+(-[A-Za-z0-9]+){2}, уже соответствует только кодам, которые содержат три алфавитно-цифровых блока с ровно двумя непоследовательными интерстициальными тире.

Если вы используете второе регулярное выражение, это в основном проблематично, потому что выперевернуло ваше состояниеПроще спросить, не соответствует ли он [-A-Za-z0-9]+, чем тот, который соответствует другому шаблону, который подходит только для последовательностей с недопустимыми символами - запутанный двойной отрицательный знак.

Для третьего условия вы, вероятно, ненужно вообще что-либо проверять.Вы уже устранили все другие случаи сбоев (недопустимые символы и неправильное расположение), поэтому вы можете просто описать, что вам нужно 3 буквенно-цифровых блока, разделенных одной чертой.

И, как уже упоминалось в другом месте, вы должныиспользуя if ... else if ... else ... и т. д.

0 голосов
/ 07 февраля 2019

Точно соответствует серийному номеру

^[A-Za-z0-9]{4}\x2d[A-Za-z0-9]{4}\x2d[A-Za-z0-9]{4}

Используйте Regexr.com для создания и тестирования

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