javascript - 用于查找电话号码中重复模式的正则表达式?或许不是?

标签 javascript regex

我想从数千个列表中找到具有模式的数字,并且我想匹配如下内容:

  • 3 个或更多的序列,任一方向 (345,2345,876)
  • 重复序列 (2233,3355,77777) 147,258,369 或它们的反序列。
  • 重复模式 (373737,33773377)

在这样的 JSON 对象中:

["ok", {"series/020" : ["02034353637", "02034445673", "02034147369", "02034653185"]}]

所以所有这些都会匹配;例如,第一个有 34 35 36,第二个有 444 和 567,最后一个有 147 和/或 369,等等。

我尝试了什么?好吧,那个小盒子里的大多数网站都在右边唠叨我!计算器搜索。一些在线书籍……但当我找到 142 page book 时,我开始怀疑是否存在“正则表达式阅读障碍”(regexia?)之类的东西,或者它可能只是厚度。我知道我什么时候被击败。

事后看来,在 Google 表格自动填充的帮助下手动构建模式的“数组搜索数组”可能会更快更容易,但这是否可能呢?

最后,有没有“付我 10 美元,我会为你做正则表达式”的网站?如果不是,他们应该是!他们会赚大钱的!谢谢。

最佳答案

你可以把它写成一个正则表达式,但为了便于阅读,我把它留成这样:

var data = ["ok", {
  "series/020": [
    "02034353637", "02034445673", "02034147369", "02034653185",
    "345", "2345", "876",
    "2233", "3355", "77777",
    "147", "258", "369",
    "373737", "33773377",
  ]
}]

var numbers = data[1]["series/020"]

var patternNumbers = numbers.filter(isPatternNumber)

// Demo output
document.write("<pre>" + JSON.stringify(patternNumbers, null, "\t") + "</pre>")
document.write("Matched " + patternNumbers.length + " out of " + numbers.length)

function isPatternNumber(n) {
  // constant pattern
  if (/147|258|369/.test(n)) return true

  // repeating pattern 3+
  if (/(?=(\d))\1{3,}/.test(n)) return true

  // sequence asc 3+
  if (/012|123|234|345|456|567|678|789/.test(n)) return true
    // sequence desc 3+
  if (/987|876|765|654|543|432|321/.test(n)) return true

  // repeating double sequence xxyy (note that x=y is possible, same as 4 in a row)
  if (/(?=(\d))\1{2}(?=(\d))\2{2}/.test(n)) return true

  // alternerting pattern xyxy (note that x=y is possible, => same as 4 in a row)
  if (/(?=(\d))\1{1}(?=(\d))\2{1}(?=(\d))\1{1}(?=(\d))\2{1}/.test(n)) return true

  return false
}

// Demo Input
var input = document.getElementsByTagName("input")[0]
var output = document.getElementsByTagName("span")[0]
input.oninput = function() {
  output.textContent = isPatternNumber(input.value)
}
Test a number:
<input type="text" /> <span></span>

关于javascript - 用于查找电话号码中重复模式的正则表达式?或许不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34695508/

相关文章:

javascript - localStorage 的设置值是否有副作用?

javascript - 开发运营 REST API : can not update work item status using PATCH method

javascript - 将小数添加到数字字符串中的最后两个数字

javascript - 正则表达式匹配以字符串结尾或什么都不结尾的字符串

regex - 将文件夹中的所有图像移动到子文件夹,并将文本文件中对这些图像的所有引用更新到它们的新位置?

javascript - 为什么在JS中arrayTest[undefined]有效

javascript - 使用 easyXDM 调整 IFrame 的大小

javascript - 为什么清除 Canvas 元素并将其放回原处会出现故障?

regex - 如何在 PhpStorm 的 "Find and Replace"中使用 RegEx 标志?

regex - 正则表达式密码验证