You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求禁止两位交替数字重复的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:57:50