Java 我应该如何更改模式以进行验证?

Java 我应该如何更改模式以进行验证?,java,regex,email,rfc822,Java,Regex,Email,Rfc822,我必须为电子邮件验证两种类型的表达式: 字母。字母。年份大于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([.])教育([.])公司 \b([0]| 20[0-1][0-8]

我必须为电子邮件验证两种类型的表达式:

字母。字母。年份大于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([.])教育([.])公司

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

private void btn_validarActionPerformed(java.awt.event.ActionEvent evt){
字符串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$”;
匹配器m_correo1=p_correo1.匹配器(w_correo);
Pattern p|u correo2=Pattern.compile(“^\\b([0]| 20[0-1][0-8]| 2019)\\b+[.]?[a-zA-Z]+[.]?[a-zA-Z]+\@[a-zA-Z]([.])com([\\.])co$”;
匹配器m_correo2=p_correo2.匹配器(w_correo);
if(m_correo1.matches()){
字符串validacion=“”;
validacion=validacion+“纠正电气故障的指令
”; 校正设置前景(颜色为绿色); } 否则{ 字符串validacion=“”; 如果(!m_correo1.matches()){ validacion=validacion+“不正确的电气指令
”; 不正确的挫折背景(红色); } } 如果(m_correo2.matches()){ 字符串validacion=“”; validacion=validacion+“纠正电气故障的指令
”; 校正设置前景(颜色为绿色); } else{String validacion=”“; 如果(!m_correo2.matches()){ validacion=validacion+“不正确的电气指令
”; 不正确的挫折背景(红色); } } }

当您尝试验证有效电子邮件时,结果是该电子邮件不正确。按钮NO显示为红色,但按钮SI未显示为绿色。

下面的正则表达式与您描述的模式匹配:“letter.letter.year大于2018@uts.edu.co“

在这里试试:

试试下面的正则表达式:“(?:[a-zA-Z]\){2}([0-9]{4})\@uts.edu.co”

我已经为你的示例邮件测试了它。使用该年的捕获组,您可以验证该年是否大于2018年。正则表达式将只匹配符合您字母模式的电子邮件。字母。四位数Year@uts.edu.co

下面是我用来测试正则表达式的.java:

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无效


干杯!

对于此类型的电子邮件。信函。年份大于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]\.
    将字符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
  • $
    字符串结尾
在爪哇

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$";
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$";

对于这种类型的电子邮件,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})
    范围从
  • \.[a-zA-Z]\.[a-zA-Z]
    匹配一个点的2倍,后跟一个字符a-Z
  • @\w+(?:\。\w+*
    匹配@,对一个单词字符重复1+次,然后对一个点和1+个单词字符重复0+次
  • \.com\.co
    Match.com.co
  • $
    字符串结尾
在爪哇

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$";
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$";

您的问题写得不清楚。请更好地解释您的输入内容和输出内容。