如何否定正则表达式模式
How to negate a regex pattern
所以我有一个正则表达式来识别我的输入的无效模式,我希望能够反转它,这样它就不会匹配无效的案例,而是匹配有效的案例。这是无效的正则表达式:
^(?=\d{6}$)(?:(\d){5,}|012345|123456|234567|345678|456789|567890|098765|987654|876543|765432|654321|54321)$
理想情况下匹配阳性病例应确保:
- 6 位数
- 同一个数字不重复6次
- 它不是按顺序递增或递减 1
我已经尝试用否定的先行替换非捕获组,但是由于我不熟悉正则表达式的更精细语法,如果这只是一个输入错误或者我需要更改其他地方的正则表达式
编辑
虽然我知道这可以由 javascript 处理,但我想用正则表达式处理它以利用 Foundations 错误处理
您可以使用这个正则表达式:
/(?=^(\d){6}$)(?!^{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
。
所以我有一个正则表达式来识别我的输入的无效模式,我希望能够反转它,这样它就不会匹配无效的案例,而是匹配有效的案例。这是无效的正则表达式:
^(?=\d{6}$)(?:(\d){5,}|012345|123456|234567|345678|456789|567890|098765|987654|876543|765432|654321|54321)$
理想情况下匹配阳性病例应确保:
- 6 位数
- 同一个数字不重复6次
- 它不是按顺序递增或递减 1
我已经尝试用否定的先行替换非捕获组,但是由于我不熟悉正则表达式的更精细语法,如果这只是一个输入错误或者我需要更改其他地方的正则表达式
编辑 虽然我知道这可以由 javascript 处理,但我想用正则表达式处理它以利用 Foundations 错误处理
您可以使用这个正则表达式:
/(?=^(\d){6}$)(?!^{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
。