Точка не должна появляться последовательно в String Java - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть проверка кода, допустим ли пользовательский ввод в шаблоне регулярного выражения.Паттер @, проблема в том, как проверить, является ли персонаж.появляется последовательно

[az | AZ | 0-9 | [.] {1}] + @ [[az | AZ | 0-9] + я уже пробовал эту скороговорку.

    System.out.print("Enter your Email: ");
    String userInput = new Scanner(System.in).nextLine();

    Pattern pat = Pattern.compile("[a-z|A-Z|0-9|[.]{1}]+@[a-z|A-Z|0-9]+");
    Matcher mat = pat.matcher(userInput);

    if(mat.matches()){
        System.out.print("Valid");
    }else{
        System.out.print("Invalid");
    }

}

}

если вход een..123 @ asd123 Я ожидаю, что выход будет недействительным, но если вход een.123@asd123, выход будет действительным

Ответы [ 2 ]

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

Класс символов соответствует любому из перечисленных символов. Если вы указываете канал |, это не означает OR, но может также соответствовать |.

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

^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*@[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*$

Это будет соответствовать

  • ^ Начало строки
  • [a-zA-Z0-9]+ Соответствует 1+ раз любому персонажу, указанному в классе персонажа
  • (?:\.[a-zA-Z0-9]+)* Повторите 0+ раз группу, которая начинается с точки и соответствует 1+ раз тому, что указано в классе символов, чтобы предотвратить последовательные точки.
  • @ Match @ char
  • [a-zA-Z0-9]+ Совпадение 1+ символов
  • (?:\.[a-zA-Z0-9]+)* Совпадение повторяющейся группы
  • $ Конец строки

Regex101 demo

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

Если вы не хотите последовательных периодов, используйте [a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*

Объяснение

[a-zA-Z0-9]+      Match one or more letters or digits
(?:               Start non-capturing group
   \.               Match exactly one period
   [a-zA-Z0-9]+     Match one or more letters or digits
)*                End optional repeating group

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


В качестве альтернативы используйте отрицательный взгляд: (?!.*[.]{2})[a-zA-Z0-9.]+@[a-zA-Z0-9]+

Объяснение

(?!.*[.]{2})                 Fail match if 2 consecutive periods are found
[a-zA-Z0-9.]+@[a-zA-Z0-9]+   Match normally
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...