我正在寻找一个可以验证非负数的decimal(.NET类型)的正则表达式,即如果可以使用decimal.Parse(...)
解析非负值,那么应该认为它是有效的。否则无效。正则表达式来验证.NET的非负十进制或空白?
我很好,如果它没有通过28-29位有效数字验证 - 依靠用户的理智 - 然后我们有另一个验证层,无论如何都会接收它。
这里是我想出了:
^(?:[1-9]\d*|0)?(?:\.\d+)?$
问题是,它拒绝1.
这是一个有效的数字(你可以在VS立即窗口验证)。可能是其他边缘情况,我没有测试。请指教。
P.S.我包含ASP.NET和C#标记,因为这是用C#编写的Web应用程序,其中这个正则表达式被传递给第三方组件,然后在客户端(即JS)上工作,所以我不能轻松地将自定义代码那里(即decimal.TryParse
或者那样)。
'decimal.Parse'也接受一家领先的标志。 '“+1”是一个可以解析的非负值。所以''-0“',甚至。 'decimal.Parse'还可以接受数千个分隔符:'“1,000”'可以被解析。 'decimal.Parse'是文化敏感的,所以'''不应该被硬编码,除非文化是一样的。 'decimal.Parse'接受空格。 '“100”'可以被解析。我可能错过了更多。 – hvd
@ hvd,是的,我明白,谢谢你提到那些边缘情况。我不试图做到100%完美,只是试图覆盖99.9%的测试用例。还有一些培训可以确保人们不会在用户界面上发疯。如果你真的想要的话,我肯定总能打破任何程序。 – Neolisk
@ hvd,btw +1测试用例由接受的答案处理。 – Neolisk