簡體   English   中英

用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('/(.)./', '$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM