这么多年后我才做出回应,因为我发现所提供的任何解决方案都不够可靠。
如果字符串包含带有逗号作为小数分隔符的浮点数,则这是一个更严格的测试,如果是,则将其转换。如果需要,它还会删除数字周围的空格。它并没有真正测试格式错误的数字。
if( preg_match('/^\s*[0-9\.]*,\d*\s*$/', $str))
return (float)str_replace(",",".",str_replace(".","",trim($str)));
else
return $str ;
如果你知道一个数值总是有一个欧洲符号(所以没有逗号的 1.234 也应该转换为 1234),它应该是:
if( preg_match('/^\s*[0-9\.]*,?\d*\s*$/', $str))
return (float)str_replace(",",".",str_replace(".","",trim($str)));
else
return $str ;
如果您想要一个真正严格的测试,没有格式错误的数字(例如以千位分隔符开头),并且千位分隔符之间仅使用三位数字(但并非所有国家/地区都使用三位,例如印度!):
if( preg_match('/^\s*\d{0,3}((?<=\d)\.\d{3})*,?\d*\s*$/', $str))
return (float)str_replace(",",".",str_replace(".","",trim($str)));
else
return $str ;
最后,如果您想更加严格并且不希望数字能够以逗号开头或结尾(“1.234”或“,17”,在某些情况下被认为是正确的),它变成
if( preg_match('/^\s*\d{1,3}((?<=\d)\.\d{3})*(,\d+)*\s*$/', $str))
return (float)str_replace(",",".",str_replace(".","",trim($str)));
else
return $str ;