PHP - Formatting a number to match a specific template

I have an integer of specific length (I know it will have 14 digits, no more, no less), for example:

98000011601815

I want to format it to a string, so it looks like this:

9800-0011-6018-15

How can I do this properly? I know I can do this with using a lot of substr(), but I think there's a more elegant way that I'm not familiar with.

Answer

Solution:

Use preg_replace

Whilst the input is numeric, it's going to be treated as a string, so this is "how can I format a string inserting delimiters" - a simple way to do that is to use preg_replace:

$input = 98000011601815;

$output = preg_replace(
  '/(\d{4})(\d{4})(\d{4})(\d{2})/',
  '\1-\2-\3-\4',
  $input
);
# Output is "9800-0011-6018-15"

Explaining the regex used there:

/       # Start of regex
(\d{4}) # exactly 4 digits (capturing group 1)
(\d{4}) # exactly 4 digits (capturing group 2)
(\d{4}) # exactly 4 digits (capturing group 3)
(\d{2}) # exactly 2 digits (capturing group 4)
/       # End of regex

Source