用 php 中的随机数字替换字符串中的奇数位置
Replace odd positions in string with a random digit in php
我有一个字符串,我只想用随机数字替换其中的奇数位置。
例如,字符串是'123456'
。现在我想要的输出是 '528496'
;
注意奇数位的数字1,3,5被随机数字5,8,9代替。
我知道如何使用 PHP 循环来做到这一点,但想知道是否可以使用正则表达式来完成。
我在网上找到了以下两个相关的解决方案,但仍然无法实现。
解决方案 1
echo preg_replace('/(.)./', ' ', $str);
解决方案 2
echo preg_replace_callback('/\d/', function() {
return chr(mt_rand(97, 122));
}, $str);
PS:我试图对这些问题发表评论,但由于我的声誉只有 5,所以我无法:(
替换奇数索引处的字符
echo preg_replace_callback('/.(.|$)/', function ($matches) {
return rand(0, 9) . $matches[1];
}, $str);
替换偶数索引处的字符
echo preg_replace_callback('/(.)./', function ($matches) {
return $matches[1] . rand(0, 9);
}, $str);
备注
如果您的 PHP 版本低于 7.1,您不应使用 rand()
,因为它是一个无法正常工作的错误功能。请改用 mt_rand(0, 9)
。
如果您需要随机数的加密安全性,请改用 random_int(0, 9)
。此功能在 PHP 7.
中可用
您可以在完全不引用匹配字符串的情况下执行替换。只保留必须替换的单个字符。
代码:(PHP7.4 Demo)
替换奇数位置:
echo preg_replace_callback(
'/^.|.\K./',
fn() => rand(0,9),
'1234567'
);
替换偶数位置:
echo preg_replace_callback(
'/.\K./',
fn() => rand(0,9),
'1234567'
);
我有一个字符串,我只想用随机数字替换其中的奇数位置。
例如,字符串是'123456'
。现在我想要的输出是 '528496'
;
注意奇数位的数字1,3,5被随机数字5,8,9代替。
我知道如何使用 PHP 循环来做到这一点,但想知道是否可以使用正则表达式来完成。
我在网上找到了以下两个相关的解决方案,但仍然无法实现。
解决方案 1
echo preg_replace('/(.)./', ' ', $str);
解决方案 2
echo preg_replace_callback('/\d/', function() {
return chr(mt_rand(97, 122));
}, $str);
PS:我试图对这些问题发表评论,但由于我的声誉只有 5,所以我无法:(
替换奇数索引处的字符
echo preg_replace_callback('/.(.|$)/', function ($matches) {
return rand(0, 9) . $matches[1];
}, $str);
替换偶数索引处的字符
echo preg_replace_callback('/(.)./', function ($matches) {
return $matches[1] . rand(0, 9);
}, $str);
备注
如果您的 PHP 版本低于 7.1,您不应使用 rand()
,因为它是一个无法正常工作的错误功能。请改用 mt_rand(0, 9)
。
如果您需要随机数的加密安全性,请改用 random_int(0, 9)
。此功能在 PHP 7.
您可以在完全不引用匹配字符串的情况下执行替换。只保留必须替换的单个字符。
代码:(PHP7.4 Demo)
替换奇数位置:
echo preg_replace_callback(
'/^.|.\K./',
fn() => rand(0,9),
'1234567'
);
替换偶数位置:
echo preg_replace_callback(
'/.\K./',
fn() => rand(0,9),
'1234567'
);