如何仅拒绝正则表达式模式中的一个字符串

How can I deny only one string from a regex pattern

我正在使用正则表达式模式进行十六进制颜色验证,并在 https://regex101.com 上对其进行了测试。

问题是我不希望白色 - #FFFFFF 被视为有效选择。

我试过这个:

^#(?=[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})((?!FFFFFF).)*$

并且#FFFFFF 并不像我想要的那样被认为是有效的,但现在我得到

#FFFasdfsdfg

或这个

#F00

作为有效的十六进制颜色,不会出现具有以下模式的情况:

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

我做错了什么?

感谢您的帮助。

您可以使用

^#(?!F{6}$)(?:[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

regex demo

当从第一个 # 到字符串末尾有 6 个 F 个字符时,(?!F{6}$) 否定先行匹配失败。

如果您只想禁止 #replace (?!F{6}$) with (?!F+$) 之后的任何数字(1 个或多个)。