2

I am having a regex where i check the input is having 6 digit number. I am able to achieve it with the below refgex

/^\d{6}$/gm.test("123456")

I have used this regex in multiple places so I am trying to make it as a function

function testNumber(number, digitLength = 6){
  return /^\d{6}$/gm.test(number)
}

Now in some places the digitLength is of 3 and in some places its 4, now how can i interpolate the digitLength in the regex so i can pass as much the digitLength instead of hardcoding 6 in the regex.

Any help is appreciated

7
  • 4
    new RegExp(`^\\d{${digitLength}}$`, 'gm').test(number) Commented Dec 10, 2021 at 9:02
  • @CherryDT yep template literals would be easy but where to add so that why I am confused, without failing the regex Commented Dec 10, 2021 at 9:05
  • so there is no way to interpolate variables inside regex string ? Commented Dec 10, 2021 at 9:06
  • @CherryDT let me try and will update Commented Dec 10, 2021 at 9:06
  • See also: Use dynamic (variable) string as regex pattern in JavaScript Commented Dec 10, 2021 at 9:08

2 Answers 2

2

Instead of a dynamic regex you could also do it like this:

function testNumber(number, digitLength = 6){
  return number.length === digitLength // check expected length
    && /^\d+$/.test(number);           // and that it is all digits
}
Sign up to request clarification or add additional context in comments.

Comments

2

You are looking for (your regex):

function testNumber(number, digitLength = 6){
  return new RegExp(`^\\d{${digitLength}}$`, 'gm').test(number);
}

Refs: RegExp, Template literals.

Same, but optimized:
As @Thomas noticed, you don't need g flag in your case, because you always match global (full string), and you don't need m flag too, because you accept one-line inputs. So regex like this is enough:

function testNumber(number, digitLength = 6){
  return new RegExp(`^\\d{${digitLength}}$`).test(number);
}

2 Comments

Why gm? There's no need for global nor multiline here. We always match the entire string.
@Thomas make sence, I'll update answer, thanks for advice!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.