利用Java裡的正則表示式求一群人身份證上的出生年月日
阿新 • • 發佈:2018-12-17
package Regex; import java.util.regex.*; import java.util.regex.Matcher; public class testIdCard { public static void main(String[] args) { testID_Card(); } public static void testID_Card() { // 測試是否為合法的身份證號碼 String[] strs = { "130681198712092019", "13068119871209201x", "13068119871209201", "123456789012345", "12345678901234x", "1234567890123" }; // 準備正則表示式(身份證有15位和18位兩種,身份證的最後一位可能是字母) String regex = "(\\d{14}\\w)|\\d{17}\\w"; // 準備開始匹配,判斷所有的輸入是否是正確的 Pattern regular = Pattern.compile(regex); // 建立匹配的規則Patter StringBuilder sb = new StringBuilder(); // 遍歷所有要匹配的字串 for (int i = 0; i < strs.length; i++) { Matcher matcher = regular.matcher(strs[i]);// 建立一個Matcher sb.append("身份證: "); sb.append(strs[i]); sb.append(" 匹配:"); sb.append(matcher.matches()); System.out.println(sb.toString());//轉化成字元型輸出 sb.delete(0, sb.length());// 清空StringBuilder的方法 } GetBirthDay(strs); } private static void GetBirthDay(String[] strs) { System.out.println("準備開始獲取出生日期"); // 準備驗證規則 Pattern BirthDayRegular = Pattern.compile("(\\d{6})(\\d{8})(.*)"); // .*連在一起就意味著任意數量的不包含換行的字元 Pattern YearMonthDayRegular = Pattern.compile("(\\d{4})(\\d{2})(\\d{2})"); for (int i = 0; i < strs.length; i++) { Matcher matcher = BirthDayRegular.matcher(strs[i]); if (matcher.matches()) { //matcher.group(2)匹配BirthDayRegular裡的第二個表示式\d{8}的8個字元即出生年月加日期 Matcher matcher2 = YearMonthDayRegular.matcher(matcher.group(2)); //若不為空,依次輸出年月日 if (matcher2.matches()) { System.out.println(strs[i]+" 中的出生年月分解為: "+"年" + matcher2.group(1) + " 月:" + matcher2.group(2) + " 日:" + matcher2.group(3)); } } } } }