PHP格式将数千个分组为非分组

时间:2017-08-17 12:11:31

标签: php laravel numbers

我有一个系统,您可以在其中输入金额并计算一些内容并将其放入数据库中。

然而,我注意到的是多人进入不同的格式。

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

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

以前,我刚刚这样做了“,”被替换为“。”解决第一个不正确的问题,但最近人们一直在做最后一个错误的问题,其中有数千人被分组。

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

4 个答案:

答案 0 :(得分:2)

前面:

  • 使用jQuery,允许您的输入仅接受"。",并且禁止","

在控制器中:

  • 如果用户的浏览器上没有javascript,请检查输入是否包含","如果是,则返回错误并显示一条消息,告知用户只接受点。

答案 1 :(得分:2)

有两种方法:

  • 不允许用户以“错误”格式输入值,只需拒绝
  • 通过正则表达式识别“错误”的格式化值,并用正确的字符替换错误的字符

答案 2 :(得分:1)

在前端,您可以使用一些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

答案 3 :(得分:1)

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

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

您在此处的选择是要明确只允许使用没有任何非数字字符的数值,除了用于分隔小数部分的点,或者设计一个转换这些不同文字的过程:

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);
}

我检查了它,并为你的三个案件返回美国写作。