簡體   English   中英

如何在 PHP 中使用正則表達式格式化數字

[英]How to format numbers using Regular Expression in PHP

我需要將格式更改為123.456.789.11 ,到目前為止,我只能按照示例https://regex101.com/r/sY1nH4/1中所示進行操作,但我需要它始終具有 3 位數字一開始,謝謝你的幫助

$repl = preg_replace('/(?!^)(?=(?:\d{3})+$)/m', '.', $input);

您應該斷言它不是字符串的末尾,以防止在末尾添加點:

\d{3}(?!$)\K
  • \d{3}匹配3個數字
  • (?!$)否定前瞻,斷言不是字符串的結尾到右邊
  • \K忘記到目前為止匹配的內容

正則表達式演示

$re = '/\d{3}(?!$)\K/m';
$str = '111222333444
11222333444';

$result = preg_replace($re, ".", $str);

echo $result;

Output

111.222.333.444
112.223.334.44

我會使用這種方法,使用捕獲組:

$input = "12345678911";
$output = preg_replace("/(\d{3})(?=\d)/", "$1.", $input);
echo $output;  // 123.456.789.11

上面的代碼從左邊開始每 3 個數字替換為相同的數字后跟一個點,前提是至少要跟一個其他數字。

這是使用\B (與\b相反)的可能解決方案:

\d{3}\B\K

將其替換為.

正則表達式演示

通過在 3 位數字后使用\B ,我們確保不匹配最后的 position。

實際上不需要正則表達式。 分成相等的部分,用逗號連接:

$formatted = implode(',', str_split($str, 3));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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