DEV Community

Taufik Nurrohman
Taufik Nurrohman

Posted on • Edited on

Match Valid RGB/RGBA Color String using Range Pattern

First, we need to match range from 0 to 9. This range is safe enough so you can just:

let range = /^[0-9]$/;
Enter fullscreen mode Exit fullscreen mode

Then match range from 10 to 99:

let range = /^([0-9]|[1-9][0-9])$/;
Enter fullscreen mode Exit fullscreen mode

Then match range from 100 to 199:

let range = /^([0-9]|[1-9][0-9]|1[0-9][0-9])$/;
Enter fullscreen mode Exit fullscreen mode

Then match range from 200 to 249:

let range = /^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])$/;
Enter fullscreen mode Exit fullscreen mode

Last, match range from 250 to 255:

let range = /^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|2[0-5][0-5])$/;
Enter fullscreen mode Exit fullscreen mode

You can narrow down the range pattern using alternative syntax. For example, use \d in place of [0-9]:

let range = /^(\d|[1-9]\d|1\d{2}|2[0-4]\d|2[0-5]{2})$/;
Enter fullscreen mode Exit fullscreen mode

Test it!

for (let i = -100; i < 300; ++i) {
    if (range.test(i + "")) {
        console.log('[' + i + ']');
    } else {
        console.log(i);
    }
}
Enter fullscreen mode Exit fullscreen mode

Matching RGB color string using the range pattern (with permissive white-spaces):

let range = '(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|2[0-5]{2})';

let rgb = new RegExp('^rgb\\(\\s*' + range + '\\s*,\\s*' + range + '\\s*,\\s*' + range + '\\s*\\)$');
Enter fullscreen mode Exit fullscreen mode

To match RGBA color string, you need to create alpha range. First, match range from 0 to 1:

let alpha = /^(0|1)$/;
Enter fullscreen mode Exit fullscreen mode

Then match the decimal point prefixed by 0:

let alpha = /^(0|0\.[0-9]+|1)$/;
Enter fullscreen mode Exit fullscreen mode

Sometimes, leading zero is not required, so:

let alpha = /^(0|0?\.[0-9]+|1)$/;
Enter fullscreen mode Exit fullscreen mode

Narrow down the pattern:

let alpha = /^([01]|0?\.\d+)$/;
Enter fullscreen mode Exit fullscreen mode

To match RGBA color string:

let range = '(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|2[0-5]{2})';
let alpha = '([01]|0?\\.\\d+)';

let rgb = new RegExp('^rgba\\(\\s*' + range + '\\s*,\\s*' + range + '\\s*,\\s*' + range + '\\s*,\\s*' + alpha + '\\s*\\)$');
Enter fullscreen mode Exit fullscreen mode

To match both RGB and RGBA color string:

let range = '(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|2[0-5]{2})';
let alpha = '([01]|0?\\.\\d+)';

let rgb = new RegExp('^(?:rgb\\(\\s*' + range + '\\s*,\\s*' + range + '\\s*,\\s*' + range + '\\s*\\)|rgba\\(\\s*' + range + '\\s*,\\s*' + range + '\\s*,\\s*' + range + '\\s*,\\s*' + alpha + '\\s*\\))$');
Enter fullscreen mode Exit fullscreen mode

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay