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,2
、10,67
、..和10.2
、2345.78
、12345678.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)的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章