QRegEx以匹配纯色调



我正在创建一个QLineEditor来手动输入十六进制格式的颜色。我想设置一个验证器来检查输入颜色是否是纯HUE颜色。

所有色调都遵循此模式,是X任意十六进制字符[从0-9或A-F]:

#FF00XX
#00FFXX
#00XXFF
#XX00FF
#XXFF00
#FFXX00

我设法检查了一个正确的HEX颜色值:^#([A-Fa-f0-9]{6})$,但我不知道如何扩展验证器以只接受色调。

有什么想法吗?

您想要的模式是^#(?:00(?:FFXX|XXFF)|FF(?:00XX|XX00)|XX(?:00FF|FF00))$

如果您希望XX是任何十六进制字符,请替换为[a-fA-F0-9]{2}。然后,正则表达式将看起来像

^#(?:00(?:FF[a-fA-F0-9]{2}|[a-fA-F0-9]{2}FF)|FF(?:00[a-fA-F0-9]{2}|[a-fA-F0-9]{2}00)|[a-fA-F0-9]{2}(?:00FF|FF00))$

请参阅regex演示。

如果不希望XX00FF匹配,请将XX替换为(?![fF]{2}|00)[a-fA-F0-9]{2}。然后,正则表达式将看起来像

^#(?:00(?:FF(?![fF]{2}|00)[a-fA-F0-9]{2}|(?![fF]{2}|00)[a-fA-F0-9]{2}FF)|FF(?:00(?![fF]{2}|00)[a-fA-F0-9]{2}|(?![fF]{2}|00)[a-fA-F0-9]{2}00)|(?![fF]{2}|00)[a-fA-F0-9]{2}(?:00FF|FF00))$

请参阅regex演示。

(?![fF]{2}|00)[a-fA-F0-9]{2}部分匹配不等于FF00的任意两个十六进制字符(不区分大小写(。

最简单的方法是只使用管道运算符来覆盖所有六种情况:

00[A-Fa-f0-9]{2}FF|00FF[A-Fa-f0-9]{2}|FF00[A-Fa-f0-9]{2}|FF[A-Fa-f0-9]{2}00|[A-Fa-f0-9]{2}00FF|[A-Fa-f0-9]{2}FF00

演示

显然,图案CCD_ 14被重复了几次。要删除冗余,可以将其保存在一个单独的变量中,并使用字符串格式替换它,形成如上所示的模式。

如果只有6个案例,您可以使用布尔OR(|(编写这些案例

(?<=#00FF|#FF00)[A-Fa-f0-9]{2}|[A-Fa-f0-9]{2}(?=00FF|FF00)|(?<=#00)[A-Fa-f0-9]{2}(?=FF)|(?<=#FF)[A-Fa-f0-9]{2}(?=00)

演示

相关内容

  • 没有找到相关文章

最新更新