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

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

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

图片说明

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

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

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