import java.util.regex.Pattern;
import java.util.regex.Matcher;java
public class Test {
public static void main(String[] args) { web
if(args.length != 1) {
System.out.println("请输入一个参数!");
System.exit(0);
}
Pattern p = Pattern.compile("\\w+@(\\w+\\.)+[a-z]{2,3}");
Matcher m = p.matcher(args[0]);
boolean b = m.matches();
if(b) {
System.out.println("有效邮件地址");
} else {
System.out.println("无效邮件地址");
}
}
}正则表达式
执行:
C:\java>java Testabc@javaweb.edu.cn
有效邮件地址服务器
C:\java>java Test abc@javaweb
无效邮件地址字符串
C:\java>java Testabc@javaweb.cc
有效邮件地址get
C:\java>java Testabc@javaweb.com.cn
有效邮件地址域名
C:\java>java Testabc@javaweb.com.cn3
无效邮件地址it
C:\java>java Testabc@javaweb.com.cncom
无效邮件地址class
C:\java>java Testab_c@javaweb.cncom
无效邮件地址import
C:\java>java Testab_c@javaweb.com.cn
有效邮件地址
C:\java>
注解:
"\\w+@(\\w+\\.)+[a-z]{2,3}"
在正则表达式中\w表示任意单词字符,范围是a-z,A-Z,_,0-9,由于在java中\原本就是转义符号,若是只写为\w则会发生歧义,甚至错误,所以要写为:\\w
+的意思就是出现一次以上,因此\\w+就表明任意长度的字符串,但不包括其余特殊字符,如_,-,$,&,*等,呵呵,若是真想进行彻底的邮件有效性检查,那正则表达式就不止这么长了,呵呵,有兴趣的能够本身写写看。
后面的我想就简单了,@必须出现,并且只准出现一次,所以直接写成@就好了。
\\w+\\.任意字符串后面加上DOT,你们都知道这是域名的特色,另外就是我写成了(\\w+\\.)+,为何呢,由于邮件服务器有多是二级域名,三级域名,或者……若是不带()+的话,abc@sina.com有效,而abc@mail.sina.com就是无效的了,所以这个是必须的。
最后是[a-z]{2,3},考虑到通常的域名最后不会出现数字,大写也不多见(我想通常应该忽略大小写的),而且最少很多于两位,如cn,us,等,最多不超过三位,如com,org,等,因此就写成了如上形式。