Что я должен изменить шаблон для проверки? - PullRequest
2 голосов
/ 14 апреля 2019

Я должен проверить два типа выражений для электронной почты:

letter.letter.year больше 2018@uts.edu.co

j.g.2019@uts.edu.co

0-2018.letter.letter@*.com.co

0.j.g@cloudmail.com.co

Я использовал эти два выражения регулярных выражений, но они не сработали:

[a-zA-Z] + [.]? [a-zA-Z] + [.]? [2-9] [0-9] (?! 18 $) [1-9] [1-9]? + $ \ @ uts ([.]) edu ([.]) co

\ b ([0] | 20 [0-1] [0-8] | 2019) \ b + [.]? [a-zA-Z] + [.]? [a-zA-Z] + \ @ [a-zA-Z] ([.]) com ([.]) co

private void btn_validarActionPerformed(java.awt.event.ActionEvent evt) {                                            
String w_correo = caja_correo.getText();
Pattern p_correo1 = Pattern.compile("^[a-zA-Z]+[.]?[a-zA-Z]+[ .]?[2-9][0-9](?!18$)[1-9][1-9]?+$\\@uts([.])edu([\\.])co$");
    Matcher m_correo1 = p_correo1.matcher(w_correo);
Pattern p_correo2 = Pattern.compile("^\\b([0]|20[0-1][0-8]|2019)\\b+[.]?[a-zA-Z]+[.]?[a-zA-Z]+\\@ [a-zA-Z] ([.])com([\\.])co$");
    Matcher m_correo2 = p_correo2.matcher(w_correo);    

    if (m_correo1.matches()) {

String validacion = "";
validacion = validacion +  "Direccion de correo electrónico correcta<br/>";
correcto.setForeground(Color.GREEN);

}

    else { 
String validacion = "";
    if (!m_correo1.matches()) {
    validacion= validacion + "Direccion de correo electrónico incorrecta<br/>";
            incorrecto.setBackground(Color.RED);
    }
}

    if (m_correo2.matches()) { 

String validacion = "";
validacion = validacion +  "Direccion de correo electrónico correcta<br/>";
correcto.setForeground(Color.GREEN);
}

    else {String validacion = "";
    if (!m_correo2.matches()) {
    validacion= validacion + "Direccion de correo electrónico incorrecta<br/>";
            incorrecto.setBackground(Color.RED);
    }
}
}                                           

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

Ответы [ 3 ]

0 голосов
/ 14 апреля 2019

Попробуйте следующее регулярное выражение: "(?: [A-zA-Z] \.) {2} ([0-9] {4}) \ @ uts.edu.co"

Я проверил это на примере ваших писем. Используя группу захвата для года, вы можете проверить, что год больше 2018. RegEx будет сопоставлять только те электронные письма, которые соответствуют вашему образцу Letter.Letter.Four Digit Year@uts.edu.co

Вот .java, который я использовал для проверки regEx:

import java.util.regex.Pattern;

открытый класс MainApp {

public static void main(String[] args) {

   // reg ex to use:  (?:[a-zA-Z]\.){2}([0-9]{4})\@uts.edu.co

    String[] email = {"j.g.2018@uts.edu.co","s.c.2019@uts.edu.co","t.t.2020@gmail.com"};

    String regExPattern = "(?:[a-zA-Z]\\.){2}([0-9]{4})\\@uts.edu.co";

    Pattern p = Pattern.compile( regExPattern );

    for(String x : email){
            Matcher m = p.matcher( x );
            boolean b = m.matches();
            if(b){
                int year = Integer.parseInt(m.group(1));
                if(year > 2018){
                System.out.println(x + " is valid");
                }
                else{
                System.out.println(x + " is not valid");
                }
            }
            else{
            System.out.println(x + " is not valid");
            }
        }

}}

Журнал с моей консоли:

j.g.2018@uts.edu.co недействителен

s.c.2019@uts.edu.co действителен

t.t.2020@gmail.com недействителен

Ура!

0 голосов
/ 14 апреля 2019

Для этого типа электронной почты letter.letter.year больше 2018@uts.edu.co, например j.g.2019@uts.edu.co, вы можете использовать:

^[a-zA-Z]\.[a-zA-Z]\.(?:2019|20[2-9][0-9]|2[1-9][0-9]{2}|[3-9][0-9]{3})@uts\.edu\.co$
  • ^ Начало строки
  • [a-zA-Z]\.[a-zA-Z]\. Матч 2 раза символ a-z, за которым следует точка
  • (?:2019|20[2-9][0-9]|2[1-9][0-9]{2}|[3-9][0-9]{3}) Диапазон совпадений больше чем 2018
  • @uts\.edu\.co Match @ uts.edu.co
  • $ Конец строки

В Java

String regex = "^[a-zA-Z]\\.[a-zA-Z]\\.(?:2019|20[2-9][0-9]|2[1-9][0-9]{2}|[3-9][0-9]{3})@uts\\.edu\\.co$";

Regex demo

Для этого типа электронной почты 0-2018.letter.letter@*.com.co, например 0.j.g@cloudmail.com.co, вы можете использовать:

^(?:2018|201[0-7]|200[0-9]|1[0-9]{1,3}|[0-9]{1,3})\.[a-zA-Z]\.[a-zA-Z]@\w+(?:\.\w+)*\.com\.co$
  • ^ Начало строки
  • (?:2018|201[0-7]|200[0-9]|1[0-9]{1,3}|[0-9]{1,2}) Диапазон от 0 до 2018
  • \.[a-zA-Z]\.[a-zA-Z] Совпадение 2 раза с точкой, за которой следует символ a-z
  • @\w+(?:\.\w+)* Совпадение @, повторять 1+ раз слово char, а затем повторять 0+ раз точку и 1+ слово
  • \.com\.co Match .com.co
  • $ Конец строки

В Java

String regex = "^(?:2018|201[0-7]|200[0-9]|1[0-9]{1,3}|[0-9]{1,3})\\.[a-zA-Z]\\.[a-zA-Z]@\\w+(?:\\.\\w+)*\\.com\\.co$";

Regex demo

0 голосов
/ 14 апреля 2019

Регулярное выражение ниже соответствует описанному вами шаблону: "letter.letter.year больше 2018@uts.edu.co".

([a-zA-Z]\.){2}([2-9][1-9][0-9]{2}|20([2-9][0-9]|19))@uts\.edu\.co

([a-zA-Z]\.){2} matches any letter followed by a period two times.
([2-9][1-9][0-9]{2}|20([2-9][0-9]|19)) matches the year 2019 or greater
@uts\.edu\.co matches @uts.edu.co literally.

Попробуйте здесь: https://regex101.com/r/hNIMRL/1

...