gpt4 book ai didi

c# - 验证输入字符串是有效的十进制数

转载 作者:行者123 更新时间:2023-11-30 15:08:09 25 4
gpt4 key购买 nike

谁能提供一种算法来检查输入字符串是否是形状和形式正确的十进制数?

正确形状和形式的规则:

  1. 最多两位小数。
  2. 出于所有实际目的,最大的数字是 99,999,999.99
  3. 整数部分可以使用空格、逗号或点作为组分隔符。
  4. 小数部分可以用逗号分隔,也可以用点分隔。

正确形状和形式的例子:

1,234,567.89   // English style1.234.567,89   // French style1 234 567,89   // German style1234567.89     // English mathematical style1234567,89     // European mathematical style12.0012.012

请抵制提议 Decimal.Parse 或 Decimal.TryParse 的诱惑。两种方法都愉快地接受诸如“1,2,3,4”之类的字符串,这不是我想要的。

最佳答案

I answered a very similar question on Friday ,而执行此操作的正则表达式将比您想象的更复杂。我强烈建议为每种样式设置一个单独的正则表达式 - 不是因为它不能在一行中完成,而是因为它的单行代码会很大并且很难维护。

以下是我会使用的模式:

English: ^[-+]?\d{1,3}(,\d{3})*(\.\d+)?$
French: ^[-+]?\d{1,3}(\.\d{3})*(,\d+)?$
German: ^[-+]?\d{1,3}(\s\d{3})*(,\d+)?$
English mathematical: ^[-+]?\d+(\.\d+)?$
European mathematical: ^[-+]?\d+(,\d+)?$

这些可以组合成类似的东西:

^[-+]?(\d{1,3}((,\d{3})*(\.\d+)?|([.\s]\d{3})*(,\d+)?)|\d+([,\.]\d+)?)$

希望单线对您来说是适当的恐惧。这是一项非常常见、重要的任务,但它也比看起来更复杂。

在 Rubular 使用您的示例输入进行测试:http://rubular.com/r/Dipvyrf6C8 (请注意,为清楚起见,我将这些组设为非捕获)。

编辑:添加了 [-+]? 子句以允许负数。

关于c# - 验证输入字符串是有效的十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5927498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com