用随机字符替换字符串中的每个数字

nn3*_*337 3 php string random numbers

我想ABC123EFG用另一个随机字符替换字符串中的每个数字。
我的想法是生成一个随机字符串,其中包含所有数字的数量,$str并将每个数字替换为$array[count_of_the_digit],有没有办法在没有 for 循环的情况下做到这一点,例如使用正则表达式?

$count = preg_match_all('/[0-9]/', $str);
$randString = substr(str_shuffle(str_repeat("abcdefghijklmnopqrstuvwxyz", $count)), 0, $count);
$randString = str_split($randString);
$str = preg_replace('/[0-9]+/', $randString[${n}], $str); // Kinda like this (obviously doesnt work)
Run Code Online (Sandbox Code Playgroud)

Xor*_*lse 5

你可以用 preg_replace_callback()

$str = 'ABC123EFG';

echo preg_replace_callback('/\d/', function(){
  return chr(mt_rand(97, 122));
}, $str);
Run Code Online (Sandbox Code Playgroud)

它会输出如下内容:

ABCcbrEFG
Run Code Online (Sandbox Code Playgroud)

如果你想大写值,你可以改变97122其对应的ASCII码的6490