2017-08-17 73 views
2

我有一個系統,您可以輸入一定數量並計算一些內容並將其放入數據庫。PHP格式化將數千個分組到非分組

但是,我注意到,多人輸入不同的格式。

有人進入: 3474,12832752 而有人進入: 3474.12832752 < ---正確 然後有些人做這一個: 3,747.12832752

現在我怎麼會做這樣的兩個能不正確的格式到正確的格式?

此前,我剛剛這樣做了「,」替換爲「。」。解決第一個不正確的問題,但最近人們做了最後一個不正確的問題,其中成千上萬人被分組。

我該如何將兩個不正確的格式成功格式化爲正確格式?

+0

那麼你需要什麼樣的'3,747.12832752'輸出? –

+0

您可以在輸入上方顯示一段文字,告訴人們要輸入什麼格式,然後才允許在實際輸入字段中輸入數字和點。 –

回答

2

在面前:

  • 使用jQuery,讓你只輸入接受,並且不允許 「 」

在控制器「。」:

  • 如果用戶沒」在他的瀏覽器上沒有javascript,檢查輸入中是否包含「,」,如果是,則返回一條錯誤消息告訴用戶只有點被接受。
2

有兩種方式:

  • 不要讓你的用戶在「錯誤」的格式輸入一個值,只是拒絕
  • 通過正則承認「錯誤」的格式和值用正確的人
+2

第二種選擇可能是不可能的。如果有人寫「123,123」,他們可能意味着「123123」或他們的意思是「123.123」。我會爲你的第一個選擇,只是拒絕它。 –

+0

我想你是對的,我也不會推薦它,但它是一個選項,如果(把理由放在這裏)重新調整可能不適用。 –

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 
1

這些格式都不是錯的。雖然第二個是用於寫入十進制數字的標準美國標準,但許多歐洲國家和地區的其他地方也使用逗號而不是小數點作爲小數點分隔符。這兩種書寫方式都是有效的。後者也是完全有效的,因爲它是在紙上寫數字的標準方式。

因此,如果您沒有明確地通知用戶數字條目應該採用給定的格式,他們有權使用他們習慣的格式。

你這裏opitions,其一是說清楚,沒有任何非數字字符僅數值只是一個點,以小數部分分開允許或設計一個過程,這些不同的書寫內容轉換:

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

我檢查了它,它會爲你的三種情況返回美國文字。