C# 中整数或小数(10,2)的正则表达式

Posted

技术标签:

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

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

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

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

string regex = @"^[+]?(?:\d0,8(?:\.\d0,2)?|\.\d1,8)$";

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

【问题讨论】:

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

我相信这应该可行:^\d0,8(\.\d1,2)?$

【讨论】:

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

以上是关于C# 中整数或小数(10,2)的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

最多输入10位整数2位小数的正则表达式

js 正则表达式 整数或小数

判断只能输入 大于0的整数或小数 正则表达式 怎么写

Java判断是不是是整数,小数或实数的正则表达式

C#常用正则表达式符号大全

求一时间的正则表达式: 如09:43:09-9:43:10,12:00:01-13:01:34