正则表达式的简单用法+利用正则表达式检验身份证号码格式

2022-05-06 20:02:03 浏览数 (1)

正则表达式最简单的用法就是用来判断一个字符串是否符合某种表达式,可以用正则表达式判断字符串是否属于电话号码,是否属于身份证号。。。。

使用正则表达式的步骤很简单:

首先:规定正则表达式,

代码语言:javascript复制
String matchString = "[a-z][0-9]{8}"

然后:获取pattern,

代码语言:javascript复制
Pattern pattern = Pattern.compile(matchString);

接下来就可以进行匹配了,

代码语言:javascript复制
Matcher matcher = pattern.matcher(charSequence);
        return matcher.matches();

通过举例来解释正则表达式的格式:

代码语言:javascript复制
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();
    }
代码语言:javascript复制
  Log.i("tag", "a22222222"   matchPattern("a22222222"));
        Log.i("tag", "a2222222" matchPattern("a2222222"));
        Log.i("tag", "az2222222" matchPattern("az2222222"));
        Log.i("tag", "2a2222222" matchPattern("2a2222222"));
代码语言:javascript复制
匹配结果为:
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之间的字符

如果我把正则表达式改成如下的表示方式:

代码语言:javascript复制
String matchString = "[a-zA-Z][^0-8]{8}";

则匹配结果为:

代码语言:javascript复制
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.

将正则表达式写成如下形式:

代码语言:javascript复制
String matchString = "\d";

匹配结果为

代码语言:javascript复制
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位身份证号码的正则表达式为:

代码语言:javascript复制
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位身份证号码的正则表达式为:

代码语言:javascript复制
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)$";

但是以上正则表达式验证的身份证号码只能说是符合身份证编码规则,不能确定身份证是否有效。

以上都是一些很简单的 小例子

0 人点赞