【问题标题】:Regex for Integer or Decimal(10,2) in C#C# 中整数或小数(10,2)的正则表达式
【发布时间】:2021-10-18 13:52:24
【问题描述】:

我正在通过 C# Windows 窗体在 Oracle 中插入数据。

我有一个接受价格的文本框(textbox.Text 应该在将数据插入数据库之前验证正则表达式)。在 Oracle 中,此数据的列是 Decimal(10,2)。所以,它应该接受1,210,67、..和10.22345.7812345678.12

我尝试了以下正则表达式:

string regex = @"^[+]?(?:\d{0,8}(?:\.\d{0,2})?|\.\d{1,8})$";

但这不符合我的要求。 谁能帮助提出正则表达式中的问题以及如何实现?

【问题讨论】:

  • Decimal.Parse。或VALIDATE_CONVERSION。不要重新发明解析
  • 您想接受像 8.328 这样的价格(Oracle 将四舍五入为 8.33),还是想拒绝多于两位小数的价格?另外,您是否需要允许符号(加号或减号)?如果没有,[+] 在您的尝试中做了什么?
  • 你为什么使用正则表达式?您有 Decimal.TryParse() 来验证输入。截断,如果这是一个真正的要求。
  • 您想接受 a ,但在您的正则表达式中没有 ,。您可以使用^\+?\d{0,8}([,.]\d{0,2})?$。但是 - 正如其他人所说 - 你应该使用 TryParse。它支持区域设置。在某些设置中,13,400.10 是 13 400.10,但在德语中,, 符号将是小数点分隔符。在德语区域设置中,13.100,10 是 13 100.10.
  • @mathguy 我不想接受超过 2 位小数。如果用户输入,则只能允许加号,尽管我也可以将其删除(不接受)。如果用户使用 + 输入,我已添加 [+] 以接受正整数或小数。

标签: c# regex oracle integer decimal


【解决方案1】:

我相信这应该可行:^\d{0,8}(\.\d{1,2})?$

【讨论】:

  • 不,这不适用于整数或小数。另外,我猜 d{1,10} 可以在小数点前取 10 位数字,而由于数据类型为 Decimal(10,2),它最多只能取 8 位小数。
  • @userhmp 刚刚注意到您也需要逗号和 8 位数字,所以我编辑了我的答案,它适用于您提供的任何用例。
  • 我不要逗号。我只希望它接受精度为 10 和小数位数为 2 的整数或小数。它不适用于那种类型的值。在在线网站上试过。
  • @userhmp 在我的原始答案中,由于 python 警告,我添加了额外的反斜杠,但是在从我的原始正则表达式中删除反斜杠后,它在 c# 的在线正则表达式测试器上工作。尝试新的编辑
  • @Daniel 更新了一个适用于我的情况。我还必须了解这是如何工作的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多