PHP格式化将数千个分组到非分组

问题描述:

我有一个系统,您可以输入一定数量并计算一些内容并将其放入数据库。PHP格式化将数千个分组到非分组

但是,我注意到,多人输入不同的格式。

有人进入: 3474,12832752 而有人进入: 3474.12832752 < ---正确 然后有些人做这一个: 3,747.12832752

现在我怎么会做这样的两个能不正确的格式到正确的格式?

此前,我刚刚这样做了“,”替换为“。”。解决第一个不正确的问题,但最近人们做了最后一个不正确的问题,其中成千上万人被分组。

我该如何将两个不正确的格式成功格式化为正确格式?

+0

那么你需要什么样的'3,747.12832752'输出? –

+0

您可以在输入上方显示一段文字,告诉人们要输入什么格式,然后才允许在实际输入字段中输入数字和点。 –

在面前:

  • 使用jQuery,让你只输入接受,并且不允许 “ ”

在控制器“。”:

  • 如果用户没”在他的浏览器上没有javascript,检查输入中是否包含“,”,如果是,则返回一条错误消息告诉用户只有点被接受。

有两种方式:

  • 不要让你的用户在“错误”的格式输入一个值,只是拒绝
  • 通过正则承认“错误”的格式和值用正确的人
+2

第二种选择可能是不可能的。如果有人写“123,123”,他们可能意味着“123123”或他们的意思是“123.123”。我会为你的第一个选择,只是拒绝它。 –

+0

我想你是对的,我也不会推荐它,但它是一个选项,如果(把理由放在这里)重新调整可能不适用。 –

在前端,你可以使用一些jQuery插件来验证/发送前强制格式替换字符错误,请检查jQuery Inputmask.

如果你不得不格式化的后端数据,您可以创建一个helper功能是这样的:

function correctNumber($number){ 
    return substr_replace(preg_replace('/[.,]/', '', $number), ".", 4, 0); 
} 

然后在你的控制器,你可以简单地用正确的方法格式化数字:

echo correctNumber("3474,12832752"); 
//3474.12832752 

echo correctNumber("3747.12832752"); 
//3474.12832752 

这些格式都不是错的。虽然第二个是用于写入十进制数字的标准美国标准,但许多欧洲国家和地区的其他地方也使用逗号而不是小数点作为小数点分隔符。这两种书写方式都是有效的。后者也是完全有效的,因为它是在纸上写数字的标准方式。

因此,如果您没有明确地通知用户数字条目应该采用给定的格式,他们有权使用他们习惯的格式。

你这里opitions,其一是说清楚,没有任何非数字字符仅数值只是一个点,以小数部分分开允许或设计一个过程,这些不同的书写内容转换:

function format_number($value) { 
    $comma = strpos($value, ','); 
    $dot = strpos($value, '.'); 
    if ($dot === false AND $comma !== false AND strrpos($value, ',') == $comma) { 
     $value = str_replace(',', '.', $value); 
    } 
    return str_replace(',', '', $value); 
} 

我检查了它,它会为你的三种情况返回美国文字。