Java 我应该如何更改模式以进行验证?
我必须为电子邮件验证两种类型的表达式: 字母。字母。年份大于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([.])公司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]
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-Z后跟一个点匹配两次[a-zA-Z]\.[a-zA-Z]\.
比2018年的比赛范围(?:2019 | 20[2-9][0-9]| 2[1-9][0-9]{2}|[3-9][0-9]{3})
Match@uts.edu.co@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})
匹配一个点的2倍,后跟一个字符a-Z\.[a-zA-Z]\.[a-zA-Z]
匹配@,对一个单词字符重复1+次,然后对一个点和1+个单词字符重复0+次@\w+(?:\。\w+*
Match.com.co\.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$";
您的问题写得不清楚。请更好地解释您的输入内容和输出内容。