面試題 正則表達式 驗證郵箱 Pattern.matches
故事背景
今天面試遇到這道題,對正則表達式還是有些懵,面試完回家復盤實現一下。這裡使用到了 Pattern 這個類來校驗正則表達式。
正則表示式分析:
^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$
#分解:
^ #匹配字元串的開始位置。
([a-z0-9A-Z]+[-|\\.]?)+ # [a-z0-9A-Z]:匹配上述任何一個。 +:匹配一次或多次前面的原子。 [-|\\.]:指定字元。?:匹配0次、1次前面的原子
[a-z0-9A-Z] # [a-z0-9A-Z]:匹配上述任何一個。
@ # 固定字元
([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+ # [a-z0-9A-Z]:匹配上述任何一個。 +:匹配一次或多次前面的原子。?:匹配0次、1次前面的原子。 \\.:轉義符,把特殊字元轉義為字元串的.。 +:匹配一次或多次前面的原子。
[a-zA-Z]{2,} # [a-zA-Z]:匹配大小寫字母。{2,}:前面的原子至少出現兩次
$ #匹配字元串的結束位置。
特殊字元
正則表達式識別的特殊字元包括:.*[]^${}\+?|()
如果要用某個特殊字元作為文本字元,就必須 轉義 。在轉義特殊字元時,你需要在它前面加一個特殊字元反斜杠(\)來告訴正則表達式引擎應該將接下來的字元當作普通的文本字元。
圖解


程式碼實現
package ffffl.cn.test;
import java.util.Scanner;
import java.util.regex.Pattern;
/**
* @author chihiro
* 面試題:
* 1. 正則表達式 驗證郵箱
*/
public class demo1 {
// 正則表達式
public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
public static void main(String[] args) {
demo1 demo1 = new demo1();
demo1.enter();
}
public void enter(){
Scanner scanner = new Scanner(System.in);
for (int i = 0; i <10;i++){
if (scanner.hasNext()) {
String s = scanner.next();
System.out.println(s);
Boolean email = isEmail(s);
if (email){
System.out.println("驗證通過!");
}else{
System.out.println("驗證不通過!");
}
}
}
scanner.close();
}
// 校驗郵箱
public Boolean isEmail(String email){
if(email.isEmpty()) {
return false;
}
return Pattern.matches(REGEX_EMAIL,email);
}
}


