Java常用正則表達式(身份證號、郵箱、手機號)格式校驗代碼示例
身份證號的正則表達式
若要在 Java 里使用正則表達式校驗身份證號,同時允許輸入為空字符串,可在原有的身份證號校驗正則表達式基礎(chǔ)上,增加對空字符串的匹配。以下是示例代碼:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IDCardValidatorWithEmpty {
// 定義支持空字符串的身份證號校驗的正則表達式
private static final String ID_CARD_REGEX = "^$|(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)";
private static final Pattern ID_CARD_PATTERN = Pattern.compile(ID_CARD_REGEX);
/**
* 校驗身份證號的方法,允許空字符串
* @param idCard 待校驗的身份證號
* @return 如果身份證號格式正確或者為空字符串返回 true,否則返回 false
*/
public static boolean isValidIDCard(String idCard) {
Matcher matcher = ID_CARD_PATTERN.matcher(idCard);
return matcher.matches();
}
public static void main(String[] args) {
// 測試用的 15 位身份證號
String idCard15 = "110105880620517";
// 測試用的 18 位身份證號
String idCard18 = "11010519880620517X";
// 無效的身份證號
String invalidIdCard = "123456789012345678";
// 空字符串
String emptyIdCard = "";
// 調(diào)用校驗方法并輸出結(jié)果
System.out.println(idCard15 + " 是否為有效的身份證號: " + isValidIDCard(idCard15));
System.out.println(idCard18 + " 是否為有效的身份證號: " + isValidIDCard(idCard18));
System.out.println(invalidIdCard + " 是否為有效的身份證號: " + isValidIDCard(invalidIdCard));
System.out.println("空字符串是否允許: " + isValidIDCard(emptyIdCard));
}
}
代碼解釋
正則表達式
^$|(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)
^$:用于匹配空字符串,^代表字符串起始位置,$代表字符串結(jié)束位置,二者結(jié)合就表示空字符串。|:這是邏輯或運算符,用于分隔不同的匹配規(guī)則。(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$):此部分用于匹配 15 位身份證號,詳細解釋如下:[1-9]\\d{7}:身份證號前 8 位,首位不能為 0。((0\\d)|(1[0-2])):表示月份,范圍是 01 - 12。(([0|1|2]\\d)|3[0-1]):表示日期,范圍是 01 - 31。\\d{3}:最后 3 位順序碼。
(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$):用于匹配 18 位身份證號,具體解釋如下:[1-9]\\d{5}:前 6 位地區(qū)代碼,首位不能為 0。[1-9]\\d{3}:接下來 4 位年份,首位不能為 0。((0\\d)|(1[0-2]))和(([0|1|2]\\d)|3[0-1]):分別表示月份和日期。((\\d{4})|\\d{3}[Xx]):最后 4 位,可能是 4 位數(shù)字或者前 3 位數(shù)字加最后一位X或x。
方法 isValidIDCard
該方法借助 Matcher 對象來檢查輸入的字符串是否與正則表達式匹配,若匹配則返回 true,反之返回 false。
注意事項
- 此正則表達式只能校驗身份證號的格式是否正確,無法驗證其真實性和有效性。
- 對于閏年 2 月日期范圍等特殊情況,正則表達式無法進行精確校驗,若需要更嚴格的驗證,可能要結(jié)合其他邏輯。
校驗郵箱的正則表達式
在 Java 中,若要校驗郵箱且允許空字符串,可以在原本用于校驗郵箱格式的正則表達式基礎(chǔ)上添加對空字符串的匹配規(guī)則。以下是示例代碼:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidatorWithEmpty {
// 定義支持空字符串的郵箱校驗正則表達式
private static final String EMAIL_REGEX = "^$|^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);
/**
* 校驗郵箱的方法,允許空字符串
* @param email 待校驗的郵箱地址
* @return 如果郵箱格式正確或者為空字符串返回 true,否則返回 false
*/
public static boolean isValidEmail(String email) {
Matcher matcher = EMAIL_PATTERN.matcher(email);
return matcher.matches();
}
public static void main(String[] args) {
// 有效郵箱
String validEmail = "example@example.com";
// 無效郵箱
String invalidEmail = "example.example.com";
// 空字符串
String emptyEmail = "";
System.out.println(validEmail + " 是否為有效的郵箱地址: " + isValidEmail(validEmail));
System.out.println(invalidEmail + " 是否為有效的郵箱地址: " + isValidEmail(invalidEmail));
System.out.println("空字符串是否允許: " + isValidEmail(emptyEmail));
}
}
代碼解釋
正則表達式
^$|^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$
^$:用于匹配空字符串。^表示字符串的起始位置,$表示字符串的結(jié)束位置,二者組合起來就表示一個空的字符串。|:邏輯或運算符,用于分隔不同的匹配規(guī)則。^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$:用于匹配正常的郵箱格式,具體解釋如下:^:表示字符串的開始。[a-zA-Z0-9_+&*-]+:匹配郵箱用戶名的開頭部分,允許包含字母、數(shù)字、下劃線、加號、連字符、星號和與號。(?:\\.[a-zA-Z0-9_+&*-]+)*:匹配用戶名中可能出現(xiàn)的點號及其后面的字符,(?: ... )是一個非捕獲組,*表示前面的部分可以出現(xiàn) 0 次或多次。@:匹配郵箱地址中的@符號。(?:[a-zA-Z0-9-]+\\.)+:匹配域名部分,允許包含字母、數(shù)字和連字符,并且可以有多個子域名,每個子域名后面跟著一個點號。[a-zA-Z]{2,7}:匹配頂級域名,頂級域名由 2 到 7 個字母組成。$:表示字符串的結(jié)束。
方法 isValidEmail
該方法通過 Matcher 對象檢查輸入的字符串是否與正則表達式匹配,如果匹配則返回 true,否則返回 false。
注意事項
- 此正則表達式雖然能校驗郵箱的基本格式,但不能保證郵箱地址是真實存在且可使用的。
- 對于一些特殊的郵箱地址,如帶有國際化域名的郵箱,可能需要更復雜的正則表達式來進行準確校驗。
手機號的正則表達式
以下為你提供針對中國大陸手機號和通用手機號的校驗正則表達式,同時支持空字符串校驗的 Java 代碼示例。
中國大陸手機號校驗(支持空字符串)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ChinesePhoneValidatorWithEmpty {
// 定義支持空字符串的中國大陸手機號校驗正則表達式
private static final String PHONE_REGEX = "^$|^1[3-9]\\d{9}$";
private static final Pattern PHONE_PATTERN = Pattern.compile(PHONE_REGEX);
/**
* 校驗中國大陸手機號的方法,允許空字符串
* @param phone 待校驗的手機號
* @return 如果手機號格式正確或者為空字符串返回 true,否則返回 false
*/
public static boolean isValidChinesePhone(String phone) {
Matcher matcher = PHONE_PATTERN.matcher(phone);
return matcher.matches();
}
public static void main(String[] args) {
// 有效手機號
String validPhone = "13800138000";
// 無效手機號
String invalidPhone = "23800138000";
// 空字符串
String emptyPhone = "";
System.out.println(validPhone + " 是否為有效的中國大陸手機號: " + isValidChinesePhone(validPhone));
System.out.println(invalidPhone + " 是否為有效的中國大陸手機號: " + isValidChinesePhone(invalidPhone));
System.out.println("空字符串是否允許: " + isValidChinesePhone(emptyPhone));
}
}
代碼解釋
- 正則表達式
^$|^1[3-9]\\d{9}$:^$:用于匹配空字符串,^表示字符串開始,$表示字符串結(jié)束,兩者結(jié)合即匹配空內(nèi)容。|:邏輯或運算符,分隔不同匹配規(guī)則。^1[3-9]\\d{9}$:用于匹配中國大陸 11 位手機號,手機號以 1 開頭,第二位是 3 - 9 中的一個數(shù)字,后面跟著 9 位數(shù)字。
通用手機號校驗(支持空字符串)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GeneralPhoneValidatorWithEmpty {
// 定義支持空字符串的通用手機號校驗正則表達式
private static final String GENERAL_PHONE_REGEX = "^$|^\\+?[1-9]\\d{1,14}$";
private static final Pattern GENERAL_PHONE_PATTERN = Pattern.compile(GENERAL_PHONE_REGEX);
/**
* 校驗通用手機號的方法,允許空字符串
* @param phone 待校驗的手機號
* @return 如果手機號格式正確或者為空字符串返回 true,否則返回 false
*/
public static boolean isValidGeneralPhone(String phone) {
Matcher matcher = GENERAL_PHONE_PATTERN.matcher(phone);
return matcher.matches();
}
public static void main(String[] args) {
// 有效通用手機號
String validGeneralPhone = "+8613800138000";
// 無效通用手機號
String invalidGeneralPhone = "+0123456789";
// 空字符串
String emptyGeneralPhone = "";
System.out.println(validGeneralPhone + " 是否為有效的通用手機號: " + isValidGeneralPhone(validGeneralPhone));
System.out.println(invalidGeneralPhone + " 是否為有效的通用手機號: " + isValidGeneralPhone(invalidGeneralPhone));
System.out.println("空字符串是否允許: " + isValidGeneralPhone(emptyGeneralPhone));
}
}
代碼解釋
- 正則表達式
^$|^\\+?[1-9]\\d{1,14}$:^$:匹配空字符串。|:邏輯或運算符。^\\+?[1-9]\\d{1,14}$:用于匹配通用手機號,\\+?表示國家碼前的+號可有可無,[1-9]表示手機號第一位不能為 0,\\d{1,14}表示后面可跟 1 到 14 個數(shù)字,滿足國際電信聯(lián)盟規(guī)定的最長 15 位手機號(含國家碼)。
注意事項
- 正則表達式只能校驗手機號格式,不能判斷手機號是否真實可用。
- 手機號規(guī)則可能隨時間和運營商調(diào)整,需根據(jù)實際情況更新正則表達式。
總結(jié)
到此這篇關(guān)于Java常用正則表達式(身份證號、郵箱、手機號)格式校驗的文章就介紹到這了,更多相關(guān)Java正則表達式格式校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot項目打包成jar后獲取classpath下文件失敗的解決
這篇文章主要介紹了SpringBoot項目打包成jar后獲取classpath下文件失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
用SpringBoot Admin監(jiān)控SpringBoot程序
這篇文章主要介紹了用SpringBoot Admin監(jiān)控SpringBoot程序,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-10-10
Java中數(shù)組轉(zhuǎn)list的兩種簡單實現(xiàn)方式
這篇文章主要介紹了兩種將數(shù)組轉(zhuǎn)換為List的方法,兩種方法分別是使用Arrays.asList()方法和使用ArrayList構(gòu)造函數(shù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-03-03
最新hadoop安裝教程及hadoop的命令使用(親測可用)
這篇文章主要介紹了最新hadoop安裝教程(親測可用),本文主要講解了如何安裝hadoop、使用hadoop的命令及遇到的問題解決,需要的朋友可以參考下2022-06-06

