You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:如何实现以7/8/9开头且单数字重复不超5次的正则表达式

解决正则表达式的重复次数限制问题

嘿,很高兴能帮你搞定这个正则问题!你已经写出了满足开头要求的表达式,现在咱们来加上“任意单个数字重复次数不超过5次”的限制——这里我先分两种常见情况给你说明,你可以根据实际需求选择:

情况1:禁止连续6个及以上相同数字

如果你的需求是不能出现连续6个一样的数字(比如777777xxxx或者x777777xxx这类都不允许),那可以在你原有的正则基础上,加上一个负向前瞻来排除这种情况:

^(?!.*(\d)\1{5})[789]\d{9}$

咱们拆解一下这个表达式的关键部分:

  • (?!.*(\d)\1{5}):这是负向前瞻断言,意思是“整个字符串里,不能存在任意一个数字(\d)连续重复6次”。\1是引用前面捕获到的那个数字,\1{5}就是让它再重复5次,加上第一次的捕获,总共就是6次。
  • 后面的[789]\d{9}就是你原来写的规则,保证开头是7/8/9,且总长度为10位数字。

情况2:禁止单个数字总出现次数超过5次

如果你的需求是某个数字在整个10位字符串里总共出现不能超过5次(比如不能有6个7,不管它们是不是连续的),那可以用另一种负向前瞻来实现:

^(?!.*(\d)(?:.*\1){5})[789]\d{9}$

这个表达式的核心部分解释:

  • (?!.*(\d)(?:.*\1){5}):这个断言的意思是“不能存在某个数字,在字符串里总共出现了6次及以上”。(?:.*\1){5}表示这个数字后面还能匹配到5次(加上第一次捕获的,总共6次),负向前瞻就会排除这种情况。

测试验证

你可以用一些测试用例来验证:

  • 符合要求的例子:7123456789(开头7,无重复超5次)、8888812345(连续5个8,没问题)、9191919191(9出现5次,没问题)
  • 不符合要求的例子:7777771234(连续6个7)、8888888888(全是8,共10次)

内容的提问来源于stack exchange,提问作者Gaurav Chauhan

火山引擎 最新活动