我想让我的用户选择使用逗号和点来插入值。 但是,如何将所有类型的值更改为可以保存在数据库中的正常值? 所有这些价值观:
1000,20 (1 thousand and 20 cent)
7648.12 (7 thousand, 6 hundred 48 and 12 cent)
1.123,83 (1 thousand, 1 hundred 23 and 83 cent)
1 831,21 (1 thousand, 8 hundred 31 and 21 cent)
1 823.93 (1 thousand, 8 hundred 23 and 93 cent)
1273,23 (1 thousand, 2 hundred 73 and 23 cent)
300 (3 hundred)
1.234 (1 thousand, 2 hundred and 34)
对我来说是相同的号码。 是否有一个脚本将所有这些值转换为我可以保存在我的数据库中的数字,以后用于计算其他stuf?
我尽力在stackoverflow上找到解决方案,但无法找到解决方法。 如果我重复,我很抱歉,我会立即删除我的问题。
答案 0 :(得分:1)
PHP将无法识别正确的格式,特别是因为没有明显的规则。
最好的方法是使用带有javascript的屏蔽输入,因此所有输入都使用相同的格式。
像这样: http://digitalbush.com/projects/masked-input-plugin/
然后将数字保存在float字段的数据库中。
答案 1 :(得分:1)
如果您需要至少3位小数:这是不可能的。考虑一下:
1,234 // 1234 in English speaking countries, 1.234 in Germany
否则正则表达式可能会有所帮助:
(?P<integerPart>(?:\d+|\d{1,3}(?:[., ]\d\d\d)*))(?P<decimalPart>[.,]\d\d)?
答案 2 :(得分:0)
这是另一种方法。也许我会用这个。
<?
$testString = '81 233 241,2'; //fill in here
$lastone = substr($testString, -1, 1);
$lasttwo = substr($testString, -2, 2);
$lastthree = substr($testString, -3, 3);
$needles = array(",", ".", " ");
echo '<H1>testString: '.$testString.'</H1><br/>';
if (strpos($lastone,',') !== false OR strpos($lastone,'.') !== false OR strpos($lastone,' ') !== false){
$testString = str_replace($needles, "", $testString);
$return = $testString*100;
}
else if (strpos($lasttwo,',') !== false OR strpos($lasttwo,'.') !== false OR strpos($lasttwo,' ') !== false){
$firsttwo = substr($testString, 0, -2);
$firsttwo = str_replace($needles, "", $firsttwo);
$firsttwo = (int)$firsttwo;
echo 'firsttwo: '.$firsttwo;
$firsttwo = $firsttwo*100;
$lasttwo = str_replace($needles, "", $lasttwo);
$lasttwo = (int)$lasttwo;
echo '<br/> lasttwo: '.$lasttwo;
$lasttwo = $lasttwo*10;
$return = $firsttwo+$lasttwo;
}
else if (strpos($lastthree,',') !== false OR strpos($lastthree,'.') !== false OR strpos($lastthree,' ') !== false){
$firstthree = substr($testString, 0, -2);
$firstthree = str_replace($needles, "", $firstthree);
$firstthree = (int)$firstthree;
echo 'firstthree: '.$firstthree;
$firstthree = $firstthree*100;
$lastthree = str_replace($needles, "", $lastthree);
$lastthree = (int)$lastthree;
echo '<br/> lastthree: '.$lastthree;
$return = $firstthree+$lastthree;
}
echo '<br/>return*100: '.$return;
echo '<br/>return: '.($return/100);
?>