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,等,因此就寫成了如上形式。