Reputation: 157
How would you replace all numbers in a string with a pre-defined character?
Replace each individual number with a dash "-".
$str = "John is 28 years old and donated $40.39!";
Desired output:
"John is -- years old and donated $--.--!"
I am assuming preg_replace()
will be used but I am not sure how to target just numbers.
Upvotes: 4
Views: 3835
Reputation: 92854
Simple solution using strtr
(to translate all digits) and str_repeat
functions:
$str = "John is 28 years old and donated $40.39!";
$result = strtr($str, '0123456789', str_repeat('-', 10));
print_r($result);
The output:
John is -- years old and donated $--.--!
As alternative approach you may also use array_fill function(to create "replace_pairs"):
$str = "John is 28 years old and donated $40.39!";
$result = strtr($str, '0123456789', array_fill(0, 10, '-'));
http://php.net/manual/en/function.strtr.php
Upvotes: 5
Reputation: 16688
You can also do this with a normal replace:
$input = "John is 28 years old and donated $40.39!";
$numbers = str_split('1234567890');
$output = str_replace($numbers,'-',$input);
echo $output;
just in case you were wondering. Code was tested and it works. The output is:
John is -- years old and donated $--.--!
No need for 'obscure' regular expressions. Do you remember where the slashes and braces go and why?
Upvotes: 2
Reputation: 15141
<?php
$str = "John is 28 years old and donated $40.39!";
echo preg_replace("/\d/", "-", $str);
OR:
<?php
$str = "John is 28 years old and donated $40.39!";
echo preg_replace("/[0-9]/", "-", $str);
Output:
John is -- years old and donated $--.--!
Upvotes: 3