【发布时间】: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 = @"^[+]?(?:\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