[英]Remove leading and trailing zeros from string that contains a numeric value using php
我正在嘗試從包含用於表示百分比的數值的字符串中修剪開頭和結尾的零。
我寫了這個丑陋的代碼塊,將rtrim(),ltrim()與preg_replace()結合在一起:
rtrim(ltrim(preg_replace("/\d*\.(0(?![0$])|[1-9])*\K0+$/", "", $value),"0"), ".")
但這似乎不起作用,因為如果我輸入0010.003000,則輸出為10.003000,而不是所需的10.003
有沒有辦法使正則表達式在Php中從右到左讀取(從右邊刪除零,直到找到零或[1-9])? 還是有一種方法可以改善我的正則表達式以實現我的目標?
重要說明:由於某些可爭辯的原因,我無法進行簡單的轉換來漂浮,而只能享受節省的玩電子游戲的時間。
為了更好地解釋我的奇怪問題,這里有一些具有預期行為的示例:01.00 => 1,100 => 100,002.0050 => 2.005,0.005 => .005
請嘗試以下操作:
/^0+|\..+?\K0+$/g
這無論是相匹配的一個或多個0
在s啟動的字符串^0+
,或者它匹配一個或多個0
在結束字符串s 0+$
。
在PHP中:
preg_replace_all("/^0+|\..+?\K0+$/", "", $value)
注意:我建議使用非正則表達式解決方案,因為它們更適合這種簡單情況。 盡管如此,我還是發布了這封信,因為您要求使用正則表達式。
echo trim('0010.003000', '0');
只需將字符串轉換為float
:
$s = '0010.003000';
echo (float) $s;
//=> 10.003
您會對這種正則表達式說些什么?
echo preg_replace(“ /(((^ 0+)|(0 + $))/”,“”,$ value);
好的,現在我明白了這個問題;)試試這個:
echo preg_replace("/^0*([1-9][0-9]*(\.[0-9]*[1-9]))?0*$/", "$1", $value);
為了回答您的奇怪問題,我添加了對0.000
返回0
支持:
$nbr = preg_replace('/^(0)+\.?0*$|^0+|\.0*$|\.\d+?\K0+$/', '$1', $nbr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.