我有一个正则表达式,可以匹配一组数字和字母。但是我希望能够排除任何三个连续字母。这是为了防止意外形成单词或缩写。

我的表达如下。它还排除了一些类似的字符,例如0,o,O和1,i,I,l):

^[2-9a-hjkmnp-zA-HJ-NP-Z]{4}$


这将匹配24rQ1234之类的字符串。但我希望它不匹配2dmv。因为在这种情况下,它可能包含已知的缩写(正或负)。

https://regex101.com/r/bbiQWD/1/

一种麻烦的方式是写出所有组合。我已经写了一个速记(包括相似的字符)作为示例。但这不是那么可读或易于解释/维护。

(^\d{4}$)|
(^\d{3}\w$)|
(^\d{2}[\d\w]{2}$)|
(^\d{1}[\d\w]{2}\d{1}$)|
(^\d{1}\w{1}\d{1}\w{1}$)|
(^[\d\w]{2}\d{1}[\d\w]{1}$)|
(^\w{1}\d{1}[\d\w]{2}$)


https://regex101.com/r/bbiQWD/2

有没有更好的方法来查找三个连续的字母?

最佳答案

在模式的开头,.?[a-zA-Z]{3}的负向超前:

^(?!.?[a-zA-Z]{3})[2-9a-hjkmnp-zA-HJ-NP-Z]{4}$


https://regex101.com/r/bbiQWD/4

关于javascript - 正则表达式匹配字母和数字,除非连续三个字母(任意),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54003589/

10-12 16:22
查看更多