php - 用php中的随机数字替换字符串中的奇数位置

标签 php regex preg-replace preg-replace-callback

我有一个字符串,我只想用随机数字替换奇数位置。

例如,字符串为'123456'。现在我想要的输出是'528496'; 请注意,奇数位置的数字 1,3,5 被随机数字 5,8,9 替换。

我知道如何使用 PHP 循环来完成此操作,但想知道是否可以使用正则表达式来完成。

我在网上找到了以下两个相关解决方案,但仍然无法使其工作。

解决方案1

echo preg_replace('/(.)./', '$1 ', $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 中可用。

关于php - 用php中的随机数字替换字符串中的奇数位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63781485/

相关文章:

javascript - 将数组转换为字符串时允许逗号跟随

php - 使用 preg_replace 提取属性

php - 使用 Laravel 的查询生成器的多个 leftJoins 产生错误的计数

php - 如何在 INSERT 查询中使用 JOIN?

node.js - 如何使用 Jest 模式匹配在一个文件夹中调用所有测试?

php - preg_replace '/[^0-9]/' 或 '/\D/' 或 '/\d/' 之间的区别?

javascript - 电话号码验证正则表达式

javascript - 如何获取前一天(连续)

php - 如何创建 C# DLL 以在 PHP 中使用

javascript - 正则表达式适用于在线测试器,不适用于 Typescript Regexp