身份证号、手机号和银行卡号,因为这几个数字的长度不同,可能存在嵌套现象。
以下正则表达式可以避免出现这种情况。
手机号:
((?<=[^\d])|^)(\+?86)?1([38]\d{1}|4[579]|5([0-3]|[5-9])|66|7([1-3]|[5-8])|9[189])\d{8}((?=[^\d])|$)
身份证号:
((?<=[^\d])|^)((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|(71)|(8[1-2]))\d{4}(19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]((?=[^\d])|$)
银行卡号:
((?<=[^\d])|^)([1-9]{1})(\d{15,16}|\d{18})((?=[^\d]xX)|$)