【问题标题】:C# Price Validation using regular expression other way使用正则表达式的 C# 价格验证其他方式
【发布时间】:2015-04-02 14:30:45
【问题描述】:

作为我工作的一部分,我需要从 Excel 表中读取价格值。我需要实现

  • 价格:价格中不允许包含非数字字符
  • price 应该是 int、decimal、double 等价格的有效数字,例如 10,10.00,10,233 有效,-10,-10.00,-10,2333.00 等无效
  • 价格:价格格式(点、逗号、小数)
  • 不允许零和负价格值
  • 需要检查价格值类型(数字类型,如 int、float、decimal 等,但会以货币格式保存在数据库中)

我们应该为 Price 选择什么数据类型?十进制或双精度或其他?在数据库中,我将数据库字段类型视为金钱。

【问题讨论】:

  • Price format (dots, comma's, decimals) 这是什么意思?一些文化使用逗号分隔千位,其他文化使用逗号作为小数分隔符。 是什么意思?
  • decimal 设计 用于货币值 - 不要使用 IEEE-754 浮点值,因为它们不代表 精确 i> 值:en.wikipedia.org/wiki/IEEE_754
  • 那么,您的问题是什么?标题中的那个(“我需要...的正则表达式”)或文本中的那个(“我应该为价格选择哪种数据类型?”) ?
  • 您必须提供更多示例、示例输入、所需输出...否则很难帮助您和其他遇到类似问题的人。
  • 价格格式(点、逗号、小数):是的,您是对的,某些文化正在使用不同的格式,因此他们可以将价格值以该格式表示。我的问题是“这些验证是否可以通过简单的正则表达式来完成,或者是否有任何其他方式”。客户可以以任何格式(错误地)为价格设置任何类型的值。所以我需要验证这些价格。

标签: c# .net regex


【解决方案1】:

如果您只需要在 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2018-12-11
    • 2012-12-22
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多