PHP格式化将数千个分组到非分组
我有一个系统,你输入一个数量,它计算出一些东西,然后把它放入数据库 然而,我注意到有很多人输入不同的格式 有些人进入: 3474,12832752 一些人进入: 3474.12832752前面:PHP格式化将数千个分组到非分组,php,laravel,numbers,Php,Laravel,Numbers,我有一个系统,你输入一个数量,它计算出一些东西,然后把它放入数据库 然而,我注意到有很多人输入不同的格式 有些人进入: 3474,12832752 一些人进入: 3474.12832752前面: 使用jQuery,只允许您的输入接受“.”,而不允许“,” 在控制器中: 若用户的浏览器上并没有javascript,请检查输入是否包含“,”,若包含,则返回一条错误消息,告知用户只接受点 有两种方法: 不允许用户以“错误”格式输入值,只需拒绝即可 通过正则表达式识别“错误”格式的值,并用正确的
- 使用jQuery,只允许您的输入接受“.”,而不允许“,”
- 若用户的浏览器上并没有javascript,请检查输入是否包含“,”,若包含,则返回一条错误消息,告知用户只接受点 有两种方法:
- 不允许用户以“错误”格式输入值,只需拒绝即可
- 通过正则表达式识别“错误”格式的值,并用正确的字符替换错误的字符
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”。我会选择你的第一个选择,只是拒绝它。我想你是对的,我也不会推荐它,但如果(把理由放在这里)限制可能不适用,这是一个选择。