1. 程式人生 > >正則表示式的簡單用法+利用正則表示式檢驗身份證號碼格式

正則表示式的簡單用法+利用正則表示式檢驗身份證號碼格式

正則表示式最簡單的用法就是用來判斷一個字串是否符合某種表示式,可以用正則表示式判斷字串是否屬於電話號碼,是否屬於身份證號。。。。

使用正則表示式的步驟很簡單:

首先:規定正則表示式,

String matchString = "[a-z][0-9]{8}"

然後:獲取pattern,

Pattern pattern = Pattern.compile(matchString);

接下來就可以進行匹配了,
Matcher matcher = pattern.matcher(charSequence);
        return matcher.matches();

通過舉例來解釋正則表示式的格式

private boolean matchPattern(CharSequence charSequence){
        String matchString = "[a-z][0-9]{8}";
        Pattern pattern = Pattern.compile(matchString);
        Matcher matcher = pattern.matcher(charSequence);
        return matcher.matches();
    }
  Log.i("tag", "a22222222" + matchPattern("a22222222"));
        Log.i("tag", "a2222222"+matchPattern("a2222222"));
        Log.i("tag", "az2222222"+matchPattern("az2222222"));
        Log.i("tag", "2a2222222"+matchPattern("2a2222222"));
匹配結果為:
12-14 11:29:16.392  28663-28663/com.example.yong.myfirstdemo I/tag﹕ a22222222true
12-14 11:29:16.392  28663-28663/com.example.yong.myfirstdemo I/tag﹕ a2222222false
12-14 11:29:16.393  28663-28663/com.example.yong.myfirstdemo I/tag﹕ az2222222false
12-14 11:29:16.393  28663-28663/com.example.yong.myfirstdemo I/tag﹕ 2a2222222false

上述的正則表示式表示所匹配的字串必須第一位為a-z之間的字元,後8位必須是0-9之間的字元

如果我把正則表示式改成如下的表示方式

String matchString = "[a-zA-Z][^0-8]{8}";

則匹配結果為:

12-14 11:41:49.296  32423-32423/com.example.yong.myfirstdemo I/tag﹕ a99999999匹配結果: true
12-14 11:41:49.297  32423-32423/com.example.yong.myfirstdemo I/tag﹕ aZ2222222匹配結果: false
12-14 11:41:49.297  32423-32423/com.example.yong.myfirstdemo I/tag﹕ A99999999匹配結果: true
12-14 11:41:49.297  32423-32423/com.example.yong.myfirstdemo I/tag﹕ A88888899匹配結果: false
滿足正則表示式要求的為:第一位為a-z和A-Z範圍之間的取值,注意到[^...]表示後8位的取值是取0-8的補集,即後八位必須為9.

將正則表示式寫成如下形式:

String matchString = "\\d";

匹配結果為

12-14 11:57:46.874    5752-5752/com.example.yong.myfirstdemo I/tag﹕ 9匹配結果: true
12-14 11:57:46.875    5752-5752/com.example.yong.myfirstdemo I/tag﹕ 8匹配結果: true
12-14 11:57:46.875    5752-5752/com.example.yong.myfirstdemo I/tag﹕ a8匹配結果: false
12-14 11:57:46.876    5752-5752/com.example.yong.myfirstdemo I/tag﹕ A8888899匹配結果: false

面試時經常會被問道如何判斷是否為身份證號碼????

首先要明白身份證號碼的編碼規則,然後根據編碼規則去寫正則表示式

身份證編碼規則如下(身份證有15為何和18位,以18位身份證為例):

第1位和第2位:省,自治區,直轄市程式碼(有關取值可檢視程式碼表);

第3位和第4位:地級市,盟,自治州程式碼(有關取值可檢視程式碼表);

第5位和第6位:縣,縣級市,區程式碼(有關取值可檢視程式碼表)

第7位到第10位:出生年(15位身份證出生年顯示兩位,

                           例如1992年出生,18位身份證顯示1992,而15位則顯示92);

第11位和第12位:出生月;

第13位和第14位:出生日;

第15位到第17位:順序碼,第17位若是男生則為單數,若是女生則為雙數;

第18位:表示校驗碼,可以是0-9或者X;(15位身份證無校驗碼)

驗證15位身份證號碼的正則表示式為:

String matchString = "^[1-9]\\d{7}((0[1-9])||(1[0-2]))((0[1-9])||(1\\d)||(2\\d)||(3[0-1]))\\d{3}$";
驗證18位身份證號碼的正則表示式為:
String matchString2 = "^[1-9]\\d{5}[1-9]\\d{3}((0[1-9])||(1[0-2]))((0[1-9])||(1\\d)||(2\\d)||(3[0-1]))\\d{3}([0-9]||X)$";

但是以上正則表示式驗證的身份證號碼只能說是符合身份證編碼規則,不能確定身份證是否有效。。

以上都是一些很簡單的 小例子