如何在PHP中将整数的千位逗号分隔的字符串表示形式转换为整数值? (对于其他分隔符,有一般的方法吗?)
e.g. 1,000 -> 1000
编辑(感谢@ghost)理想情况下,应该处理小数,但我可以接受以小数点截断的解决方案。
答案 0 :(得分:13)
如果简单,可以使用filter_var()
:
$number = '1,000';
$number = (int) filter_var($number, FILTER_SANITIZE_NUMBER_INT);
var_dump($number);
或者
$number = '1,000.5669';
$number = (float) str_replace(',', '', $number);
var_dump($number);
答案 1 :(得分:3)
您可以使用str_replace
去除特定字符,并使用intval
强制转换为整数。正则表达式过滤器也可用于确定输入字符串是否格式正确。以下是代码的外观:
<?php
function remove_delimiters_simple($string, $delimiter = ',') {
// Removes all instances of the specified delimiter and cast as an integer
// Comma (,) is the default delimiter
return (int) str_replace($delimiter, '', $string);
}
function remove_delimiters_advanced($string, $delimiter = ',') {
// Use preg_quote in case our delimiter is '/' for some reason
// The regular expression should match validly formatted numbers using a delimiter
// every 3 characters
$valid_format_expression = sprintf(
'/^\d{1,3}(%s\d{3})*$/',
preg_quote($delimiter, '/')
);
// If not a validly formatted number, return null
if (! preg_match($valid_format_expression, $string)) {
return null;
}
// Otherwise, return the simple value
return remove_delimiters_simple($string, $delimiter);
}
答案 2 :(得分:1)
如果使用PHP&gt; = 5.3,您可以使用numfmt_create(),例如:
$fmt = numfmt_create( 'nl_NL', NumberFormatter::TYPE_INT32 );
$num = "1,000";
echo numfmt_parse($fmt, $num); //gives 1000
注意:: nl_NL
是您在格式编号中使用的区域设置,在使用numfmt_create