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从数字字符串中删除逗号的主要内容,如果未能解决你的问题,请参考以下文章

从字符串和数字中删除逗号

如何使用正则表达式从字符串中删除字符串和特殊字符并仅显示不带逗号的数字?

从即时字符串中删除第一个逗号

在 PHP 中删除逗号分隔字符串中的值

PHP 删除字符串中的最后一个逗号

使用php和正则表达式从字符串中删除数字和特殊字符[重复]