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