我有一个需要向用户显示电话号码的网站,而不是显示实际号码以供某人从源代码中获取,我想用相应的单词替换电话号码的每个数字。例如...
355-758-0384
Would become
three five five - seven five eight - zero three eight four
这可以做到吗?抱歉,我没有要显示的代码,因为我什至不知道从哪里开始。
我有一个需要向用户显示电话号码的网站,而不是显示实际号码以供某人从源代码中获取,我想用相应的单词替换电话号码的每个数字。例如...
355-758-0384
Would become
three five five - seven five eight - zero three eight four
这可以做到吗?抱歉,我没有要显示的代码,因为我什至不知道从哪里开始。
$string="355-758-0384";
$search = array(0,1,2,3,4,5,6,7,8,9);
$replace = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
echo str_replace($search, $replace, $string);
然后您也可以使用任何不同的字符串,而无需更新代码
编辑:
如果你想要最后的自动空格,那么你的 $replace 数组可以是
$replace = array('zero ', 'one ', 'two ', 'three ', 'four ', 'five ', 'six ', 'seven ', 'eight ', 'nine ');
str_replace(' ', ' ', strtr($phone_number, array(
'0' => ' zero ',
'1' => ' one ',
...
)))
$string = '355-758-0384';
$numbers = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
'4' => 'four',
'5' => 'five',
'6' => 'six',
'7' => 'seven',
'8' => 'eight',
'9' => 'nine',
);
$string = preg_replace_callback( '/[0-9]/', function ( $matches ) use ( $numbers ) {
return $numbers[ $matches[0] ];
}, $string );
在首先尝试了其他解决方案之后,我正在使用这个解决方案,因为它的性能更高。我认为非正则表达式解决方案会更快,但在这种情况下并非如此。
我在 PHP 7.0.28 上使用 10k 交互的测试:
preg_replace_callback 0.00643s
str_replace w/strtr 0.01015s 57% slower
str_replace w/arrays 0.01123s 74% slower
对于破折号周围的空格:
$string = str_replace( '-', ' - ', $string );