C#正则表达式的问题,身份证验证

bool b = Regex.IsMatch(msg, @"^\d{17}[\d|X]|\d{15}$");
这种是对的 验证没问题
但是我把或|两侧换个位置就不对了
bool b = Regex.IsMatch(msg, @"\d{15}|^\d{17}[\d|X]$");
就这样的,这个就不对了,为什么
我拿21010119950101021A测试的

4个回答

或的优先级特别低,所以只要前面出现15位数字就true了

图片说明

我这样测试的 这2个有什么区别吗 怎么结果不一样 谢谢

A? 身份证最后一位只有字母X,拿来的A?

qq_23126581
渊渟无迹静涛君 回复Nolanamy: 正则表达式不对
大约 3 年之前 回复
Nolanamy
Nolanamy 回复向大佬低头: 我想知道我的哪错了 ,麻烦看一下截图,第一个表达式是对的,第二个错哪了,只是换个位置而已,第一个是18位|15位,第二个是15位|18位
大约 3 年之前 回复
qq_23126581
渊渟无迹静涛君 @"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$
大约 3 年之前 回复
Nolanamy
Nolanamy 回复向大佬低头: 我拿A做的测试 为什么2个结果一个是T一个是F,应该是False的
大约 3 年之前 回复
qq_23126581
渊渟无迹静涛君 身份证最后一位的英文字母X,是代表数字10。它不是英文字母,准确的说应当是罗马数字X(10)。
大约 3 年之前 回复

第一个正则表示以17个数字开头后面跟一个数字或X,或者以15个数字结尾,明显21010119950101021A既不满足前半部分条件也不满足后半部分条件;
第二个正则表示以15个数字开头,或者以17个数字和一个数字或X结尾,明显21010119950101021A满足前半部分条件。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐