Regex to match digits of specific length


I am looking to match a 15 digit number (as part of a larger regex string). Right now, I have


but I feel like there must be a cleaner way to do this.

1/28/2011 4:56:32 AM

Accepted Answer

If your regex language is Perl-compatible: \d{15}.

It is difficult to say how handle the edges (so you don't accidentally grab extra digits) without knowing the outer context in which this snippet will be used. The definitive context-independent solution is this:


You can put this in the middle of any regex and it will match (and only match) a sequence of exactly 15 digits. It is, however, quite awkward, and usually unnecessary. A simpler version that assumes non-alphanumeric boundaries (e.g., whitespace around the digits) is this:


But it won't work if the letters immediately precede or followed the sequence.

In both of the above cases, the outer (?:...) is just a bracketing construct to avoid precedence problems with the surrounding regex. Whether it is required also depends on the context.

1/28/2011 10:04:25 AM

You can generally do ranges as follows:


which means a minimum of 4 and maximum of 7 digits. For your particular case, you can use the one-argument variant, \d{15}.

Both of these forms are supported in Python's regular expressions - look for the text {m,n} at that link.

And keep in mind that \d{15} will match fifteen digits anywhere in the line, including a 400-digit number. If you want to ensure it only has the fifteen, you use something like:


which uses the start and end anchors, or


which allows arbitrary non-digits on either side.

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow