【发布时间】:2016-04-25 12:34:03
【问题描述】:
我不确定这是否可以使用正则表达式。我会尝试使用正则表达式,但如果不可能,我会切换到双重验证。
我的数据库 (postgresql) 接受 decimal 为 15,6(最多 15 位,最多 6 位小数),所以如果我有 10 位整数,我可以有 5 位小数。小数点分隔符被忽略。
我目前有这个正则表达式(逗号是小数分隔符):
^\d{1,15}(\,\d{1,6})?$
它不验证总长度,只验证左边的数字。 但由于用户也可以输入点(千位分隔符),所以我有这个怪物:
^((\d+)|(\d{1,3}(\.\d{3})+)|(\d{1,3}(\.\d{3})(\,\d{3})+))((\,\d{4})|(\,\d{3})|(\,\d{2})|(\,\d{1})|(\,))?$
这个不接受超过 3 位小数。我可以编辑这个以接受 6 分,但我仍然无法验证总长度。
是否可以验证号码的总长度?忽略点和逗号。
正则表达式应该接受:
1234567890,123456
1.234.567.890,123456
当然还有其他中间值:
1.234,12、1,0、1...
【问题讨论】:
-
你用什么语言来做这个?标记可能有助于获得更多关注。
-
好吧,它是 c#。谢谢。
-
你想做什么?小数是数字,而不是文本值。他们没有分隔符。如果您想验证一个值,您可以在 DTO 级别使用 UI 验证器和数据注释等
-
@PanagiotisKanavos 我正在尝试验证
TextBox中的输入。 -
虽然可以想出一个与您的情况相匹配的正则表达式,但它可能不是一个简单的。也许使用 Double.TryParse 和 NumberStyles 来解析输入并进行一些手动检查。如果
TryParse成功,您几乎可以做任何事情。例如,您可以ToString它并拆分小数点以检查字符串长度。它不像正则表达式那样单行,但更容易理解。