我有一个正则表达式,可以匹配一组数字和字母。但是我希望能够排除任何三个连续字母。这是为了防止意外形成单词或缩写。
我的表达如下。它还排除了一些类似的字符,例如0,o,O和1,i,I,l):
^[2-9a-hjkmnp-zA-HJ-NP-Z]{4}$
这将匹配
24rQ
和1234
之类的字符串。但我希望它不匹配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/