如何检查一个字符串是否为(非常大的)数字?

4

我需要对特定字符串进行数字验证。问题在于,这个字符串可能是一个超出C#可以表示的任何数字类型的大数,因此我不能使用TryParse函数,因为它们只能提供关于是否可以转换为这些类型的信息。

应该考虑到-/+、分隔符和当前文化设置。

我找到了一些使用正则表达式的解决方案,但它们都缺少一些细节。而且我不擅长使用正则表达式。


1
为什么不向我们展示您尝试过的正则表达式,以及您不喜欢它们的地方。正则表达式似乎很合适,但我不想建议您不喜欢的东西。 - McKay
常规表达式中缺少什么?看起来你确实需要一个好的正则表达式。 - Pieter van Ginkel
5
@Jay - 你关于不使用最新的VS的论点似乎并不公平。我们中很少有人对我们的预算或工具集有直接控制权,虽然我们在代码中努力实现严格的逻辑,但我们不能期望管理层的决策总是符合我们的期望。 - MickeyfAgain_BeforeExitOfSO
对不起,我发现我可以使用C# 4.0,我安装了先前版本的框架,并没有注意到我可以使用C#4.0来创建针对先前版本框架的应用程序。 - username
1
@Jay Bazuzi - 是的,微软每次决定发布新版本都要求全球所有公司放弃他们花费数万美元购买的一切,并花费更多的数万美元购买全新的东西,这完全是合理的。你或许曾经在微软工作过。 - Joel Etherton
显示剩余4条评论
3个回答

9

如果您正在使用C# 4.0且数字为整数,可以使用BigInteger

表示任意大小的有符号整数。

使用TryParse方法,以避免从Parse引发的可能异常(除非您确定传入的字符串始终是有效的整数)。


1
@Nick Martyshchenko - ParseTryParse都将使用当前的区域设置。它们还有一些重载,特别允许您传递一个IFormatProvider,例如CultureInfo - Oded
当OP只想验证格式时,这不是一种过度的方法吗? - Pieter van Ginkel
@Nick Martyshchenko- 不,正如其名称所示,它只存储整数。但是,OP并没有指定浮点数。 - Oded
1
@Pieter - 比正则表达式还要过度杀伤? - Oded
在这种情况下,他可以使用开源实现,例如:http://intx.codeplex.com/。 - Steven
显示剩余3条评论

3
如果您使用.NET 4.0,可以使用BigInteger。它包含一个TryParse,接受一个IFormatProver,可以做您需要的事情。BigInteger的大小是无限的,所以您需要的数字不可能比BigInteger可以处理的更大。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接