2015-04-02 25 views
-2

作爲我工作的一部分,我需要從Excel工作表中讀取價格值。我需要實現使用正則表達式的其他方式的C#價格驗證

  • 價格:在價格中的非數字字符不允許
  • 價格應該是有效的號碼價格如int,小數,雙象等有效10,10.00,10,233,-10,-10.00 ,-10,2333.00等都是無效的
  • 價格:價格格式(點,逗號,小數)
  • 零和負價值不得
  • 需要檢查的價格值類型(數字類型如int,浮動,十進制等,但會以金錢格式保存在數據庫中)

我應該選擇哪種數據類型的價格?十進制還是雙精度或其他?在數據庫中,我將數據庫字段類型視爲金錢。

+0

'價格式(點,逗號,小數) 「那應該是什麼意思?有些文化使用逗號分隔數千個,其他文化使用它作爲小數分隔符。你*意味着什麼? – 2015-04-02 14:35:49

+1

'decimal'是*設計*用於貨幣值 - 不使用IEEE-754浮點值,因爲它們不代表* exact *值:http://en.wikipedia.org/wiki/IEEE_754 – 2015-04-02 14:36:12

+2

那麼,你的問題是什麼?標題(*「我需要一個正則表達式用於......」*)或文本中的那個(*「我應該選擇哪種數據類型用於價格?」)? – Heinzi 2015-04-02 14:36:12

回答

0

我不認爲你需要任何正則表達式,如果你只需要在C#中驗證價格數字。

我建議使用Decimal類型,here你可以找到原因。 Decimal類包含一個靜態TryParse方法,可用於將數字驗證爲有效的decimal數字。下面是MSDN略加修改的例子(我決定去與InvariantCulture,但它取決於你的數據庫是否包含在EN-US格式貨幣與否):

var validated = false; 
decimal number; 
// Parse currency value using current culture. 
var value = "1,097.63"; 
var style = System.Globalization.NumberStyles.Number; 
var culture = System.Globalization.CultureInfo.InvariantCulture; 
if (!Decimal.TryParse(value, style, culture, out number)) 
    if (number > 0) // Check if the value is not negative or zero 
     validated = true; 
+0

我會檢查它,讓它儘快知道它的工作 – Rakesh 2015-04-02 15:53:35