[英]Replace odd positions in string with a random digit in php
我有一個字符串,我只想用隨機數字替換其中的奇數位置。
例如,字符串是'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 中可用。
您可以在不引用匹配字符串的情況下執行替換。 只保留必須替換的單個字符。
代碼:( PHP7.4 演示)
替換奇數位置:
echo preg_replace_callback(
'/^.|.\K./',
fn() => rand(0,9),
'1234567'
);
替換偶數位置:
echo preg_replace_callback(
'/.\K./',
fn() => rand(0,9),
'1234567'
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.