求禁止两位交替数字重复的JavaScript正则表达式
10位手机号验证正则解决方案
正确正则表达式
针对你需要排除的三类无效10位手机号,以下正则可以实现需求:
const invalidPattern = /^(?!(\d)\1{9})(?!(0123456789|9876543210))(?!(\d\d)\1{4}|(\d)\d\2\d\2\d\2\d\2)$/;
正则拆解(负前瞻逻辑,匹配到则标记为无效)
- 排除全相同数字:
(?!(\d)\1{9})
捕获第一个数字,检查后续9位是否完全重复该数字,匹配到如1111111111这类情况则判定无效。 - 排除连续升/降序数字:
(?!(0123456789|9876543210))
直接匹配固定的升序、降序10位序列,命中则判定无效。 - 排除规律重复序列:
(?!(\d\d)\1{4}|(\d)\d\2\d\2\d\2\d\2)
包含两种子情况:(\d\d)\1{4}:捕获前两位数字,后续重复4次(总长度10位),覆盖0101010101这类两位交替重复的情况;(\d)\d\2\d\2\d\2\d\2:捕获第一位数字,检查第3、5、7、9位是否与第一位相同,覆盖0102030405这类奇数位固定的规律序列。
JavaScript 使用示例
先验证输入是否为10位纯数字,再用上述正则判断有效性:
function checkValidPhone(phoneNum) { // 先校验是否为10位纯数字 if (!/^\d{10}$/.test(phoneNum)) { return false; } // 校验是否属于无效序列 return invalidPattern.test(phoneNum); } // 测试案例 console.log(checkValidPhone('1111111111')); // false console.log(checkValidPhone('0123456789')); // false console.log(checkValidPhone('9876543210')); // false console.log(checkValidPhone('0101010101')); // false console.log(checkValidPhone('0102030405')); // false console.log(checkValidPhone('1381234567')); // true console.log(checkValidPhone('1390000111')); // true
你原有正则无效的原因
你写的/^(?!.*\d{2}\d{2}|.*00|.*11|.*22)$/逻辑完全偏离需求:
- 它错误地禁止了所有包含两位相同数字的手机号(正常手机号普遍存在这类情况);
- 没有覆盖你需要排除的三类核心无效序列,因此无法达到验证目的。
内容的提问来源于stack exchange,提问作者Sébastien Gicquel
相关产品推荐
相关产品推荐

