Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP格式化将数千个分组到非分组_Php_Laravel_Numbers - Fatal编程技术网

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

PHP格式化将数千个分组到非分组,php,laravel,numbers,Php,Laravel,Numbers,我有一个系统,你输入一个数量,它计算出一些东西,然后把它放入数据库 然而,我注意到有很多人输入不同的格式 有些人进入: 3474,12832752 一些人进入: 3474.12832752前面: 使用jQuery,只允许您的输入接受“.”,而不允许“,” 在控制器中: 若用户的浏览器上并没有javascript,请检查输入是否包含“,”,若包含,则返回一条错误消息,告知用户只接受点 有两种方法: 不允许用户以“错误”格式输入值,只需拒绝即可 通过正则表达式识别“错误”格式的值,并用正确的

我有一个系统,你输入一个数量,它计算出一些东西,然后把它放入数据库

然而,我注意到有很多人输入不同的格式

有些人进入: 3474,12832752 一些人进入: 3474.12832752前面:

  • 使用jQuery,只允许您的输入接受“.”,而不允许“,”
在控制器中:

  • 若用户的浏览器上并没有javascript,请检查输入是否包含“,”,若包含,则返回一条错误消息,告知用户只接受点
  • 有两种方法:

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

    在前端,您可以使用一些jquery插件来验证/强制格式,然后再发送,检查

    如果您被迫在后端格式化数据,您可以创建如下函数:

    function correctNumber($number){
        return substr_replace(preg_replace('/[.,]/', '', $number), ".", 4, 0);
    }
    
    然后,在控制器中,您可以简单地以正确的方式格式化数字:

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

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

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

    您在这里的意见是,要么明确表示只允许使用不带任何非数字字符的数值(小数点除外),要么设计一个转换这些不同文字的过程:

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

    我检查了它,它为你的三个案例返回了美国文字。

    那么你想要什么样的
    3747.12832752
    ?你可以在输入上方有一个文本,告诉人们输入什么格式,然后在实际输入字段中只允许数字和点。第二种选择可能是不可能的。如果有人写“123123”,他们的意思可能是“123123”,或者他们的意思是“123.123”。我会选择你的第一个选择,只是拒绝它。我想你是对的,我也不会推荐它,但如果(把理由放在这里)限制可能不适用,这是一个选择。