2012-01-21 19 views
-4

在某些網站上,您可以按0.99美分的增量出售商品。我試圖驗證錢是否以這種方式進入。例如:檢查錢是否以.99美分爲增量

  • 0.00
  • 0.99
  • 1.99
  • 2.99
  • 3.99

等等以.99美分,除非釋放所有的結局。所以如果有人輸入1.79就會使檢查失敗。

我在想也許是子串/文本黑客或師。只是有點想知道如何這樣做可以做到最好的輸入方式。就像有人希望在自己的網站上使用這種定價結構一樣。不要求完整的東西。只需要一些指針。

我的事情至今:

<?php 
function is99($money) 
{ 
    if (!valid money) 
    { 
     return 0; 
    } 
    else if (ends in 00) 
    { 
     return 1; 
    } 
    else 
    { 
     ???? 
    } 
} 

if (is99($_post['price'])) 
{ 
    //allowed 
} 
else 
{ 
    die('Price isn\'t in 99 cents increments. Please check the example.'); 
} 
?> 
+1

您只想允許以'.99'或'.00'結尾的用戶輸入?或者你想測試另一個網站允許'.99'?你的問題不是很清楚。 – Ryan

+0

只允許用戶輸入。 – Keverw

+0

只是增加了一些細節。更好地解釋。 – Keverw

回答

3

當您使用$_POST你處理字符串。所以你可以驗證字符串,例如通過比較這對簡單圖形字符串函數或正則表達式:

/^\d+.99$/ 

我只寫在這裏,因爲the mathematically fitting looking solution given above沒有顯示因爲floating point precision­Docs全貌。它會失敗的輸入值,如2.99。稍微好一點的版本回合剩下的還有:

/** 
* @param string $value 
* @return bool 
*/ 
function is99($value) 
{ 
    $leftover = round($value)-$value; 
    return 0.01 == round($leftover, 2); 
} 

做這串明智放在首位不會遇到這些類型的問題反正。

但是我想知道爲什麼你很難輸入數據。如果需要以.99結束,爲什麼不創建一個合適的輸入?像

Amount [____].99 

用戶可以輸入任何正整數,所以你只需要檢查。由於用戶不能輸入太多錯誤的數字,因此更安全。而服務器端的驗證也更容易。

2

這應該爲你做它:

if (round($amount) - $amount == 0.01){ 
    // do your thing here 
} 
+0

這看起來很簡單,使感覺。也許我在想這件事。 – Keverw

+1

斜紋處理一個字符串。 – Ryan

+0

對於字符串使用['floatval($ str)'](http://php.net/manual/function.floatval.php) – ComFreek