【问题标题】:How to negate a regex pattern如何否定正则表达式模式
【发布时间】:2019-04-10 05:12:11
【问题描述】:

所以我有一个正则表达式来识别我的输入的无效模式,我希望能够反转它,而不是匹配无效案例,而是匹配有效案例。这是无效的正则表达式:

^(?=\d{6}$)(?:(\d)\1{5,}|012345|123456|234567|345678|456789|567890|098765|987654|876543|765432|654321|54321)$

理想情况下,它应确保匹配阳性病例:

  • 6 位数
  • 同一个数字不重复 6 次
  • 它不是按顺序递增或递减 1

我尝试用负前瞻替换非捕获组,但是由于我不熟悉正则表达式的更精细语法,如果这只是一个输入错误或者我需要在某处更改正则表达式,我不肯定否则

编辑 虽然我知道这可以由 javascript 处理,但我想用正则表达式处理它以利用 Foundations 错误处理

【问题讨论】:

  • 我不清楚你为什么不能使用if...
  • 如果您要查找与此不匹配的所有内容,您可以在所有内容之前用! 括起来以否定/反转表达式
  • 你不能检查它是否在javascript中匹配并在它的else部分写你的代码吗?
  • 该模式似乎没有找到正匹配。也许,你想要的只是/^(?!(?:(\d)\1{5}|012345|123456|234567|345678|456789|567890|098765|987654|876543|765432|654321|54321)$)/
  • @Betlista, Taha Paksu 我添加了一条注释,表示我喜欢只使用正则表达式而不是 javascript 来处理这个问题

标签: javascript regex regex-negation


【解决方案1】:

你可以使用这个正则表达式:

/(?=^(\d){6}$)(?!^\1{6})(?!^(?:012345|123456|234567|345678|456789|567890|098765|987654|876543|765432|654321|54321)$)^\d+$/

正则表达式使用look ahead 并首先检查6 digits。它捕获last digit,它与反向引用一起使用以检查,有not 6 of the same digit。然后它使用negative look ahead 与无效序列列表进行比较。

终于匹配到6 digits

【讨论】:

  • 好的,我可以看到这与我的尝试有什么不同,似乎效果很好。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-03-09
  • 2011-05-15
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多