PHP从数字字符串中删除逗号
Posted
技术标签:
【中文标题】PHP从数字字符串中删除逗号【英文标题】:PHP remove commas from numeric strings 【发布时间】:2012-03-09 05:51:31 【问题描述】:在 php 中,我有一个全是字符串的变量数组。存储的一些值是带逗号的数字字符串。
我需要什么:
一种从字符串中修剪逗号的方法,并且仅对数字字符串执行此操作。这并不像看起来那么简单。主要原因是以下失败:
$a = "1,435";
if(is_numeric($a))
$a = str_replace(',', '', $a);
这会失败,因为$a = "1435"
是数字。但是$a = "1,435"
不是数字。因为我得到的一些字符串将是带有逗号的常规句子,所以我不能对每个字符串都运行字符串替换。
【问题讨论】:
使用 preg_replace 选择性地替换两边用 [0-9] 括起来的逗号? 【参考方案1】:未经测试,但可能类似于if(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)
【讨论】:
是的,这行得通。我尝试了所有我期望的字符串格式,这很有效。一旦网站允许我将标记为已接受的答案。 如果您想从包含单词的字符串中的数字中删除逗号,如果您想避免删除单词中的逗号,请使用此模式:/[0-9]+[,]+[0- 9]+/ 这个答案并不优雅。当可以单独使用preg_replace()
完成时,为什么你们会先preg_match()
然后str_replace()
?【参考方案2】:
反过来做:
$a = "1,435";
$b = str_replace( ',', '', $a );
if( is_numeric( $b ) )
$a = $b;
【讨论】:
每次调用str_replace
的潜在开销,但没有任何正则表达式是一大优势。【参考方案3】:
function cleanData($a)
if(is_numeric($a))
$a = preg_replace('/[^0-9,]/s', '', $a);
return $a;
【讨论】:
OP 已声明$a = "1,435" is not numeric
。所以这个答案会失败。这个答案的价值也很低,因为没有解释它是如何工作的或者为什么它是一个好主意。【参考方案4】:
最简单的是:
$var = intval(preg_replace('/[^\d.]/', '', $var));
或者如果你需要浮动:
$var = floatval(preg_replace('/[^\d.]/', '', $var));
【讨论】:
你忘记了负数的可能性。您需要添加 - $var = floatval(preg_replace('/[^\d\.\-]/', '', $var)); 点和连字符不需要在字符类中转义。【参考方案5】:试试这个。这对我有用
number_format(1235.369,2,'.','')
如果你像这样使用 number_format
number_format(1235.369,2)
答案将是 1,235.37
但是如果你像下面这样使用
number_format(1235.369,2,'.','')
答案将是 1235.37
它正在删除“1,235.37”的“,”
【讨论】:
有效!但问题是关于从现有数字字符串中删除逗号,而不是在任何数值上对其进行格式化。如果您尝试number_format('1,235.369',2,'.','')
,它将无法正常工作。【参考方案6】:
如果您想从 也 包含单词的字符串中的数字中删除逗号,我认为最简单的方法是使用 preg_replace_callback:
示例:
$str = "Hey hello, I've got 12,500 kudos for you, spend it well"
function cleannr($matches)
return str_replace("," , "" , $matches["nrs"]);
$str = preg_replace_callback ("/(?P<nrs>[0-9]+,[0-9]+)/" , "cleannr" , $str);
输出:
“你好,我有12500点赞给你,好好花钱”
在这种情况下,模式(正则表达式)与接受的答案中给出的模式不同,因为我们不想删除其他逗号(标点符号)。
如果我们在这里使用/[0-9,]+/
而不是/[0-9]+,[0-9]+/
,输出将是:
“你好,我有 12500 点赞,你花得好”
【讨论】:
【参考方案7】:听起来您正在寻找的理想解决方案是filter_var()
:
$a = filter_var($a, FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND);
(请注意,它使用的是 FILTER_VALIDATE_FLOAT 而不是 FILTER_VALIDATE_INT,因为它当前没有 FILTER_FLAG_ALLOW_THOUSAND 选项)。
【讨论】:
以上是关于PHP从数字字符串中删除逗号的主要内容,如果未能解决你的问题,请参考以下文章