c# - 具有最大长度的小数正则表达式

标签 c# regex

我不确定使用正则表达式是否可行。我会尝试使用正则表达式,但如果不可能,我会切换到双重验证。

我的数据库 (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...

最佳答案

我觉得你需要

^(?:\d{1,3}(?:\.\d{3}){0,4}|\d{1,15})(?:,\d{1,6})?$

查看 regex demo

整数部分只允许 1 到 15 位数字(或 5 组 3 位数字 block ,用 . 数字分组符号分隔),并且可选地后跟逗号和 1 到 6 位十进制数字。

  • ^ - 字符串的开始
  • (?:\d{1,3}(?:\.\d{3}){0,4}|\d{1,15}) - 2 个备选方案:
    • \d{1,3}(?:\.\d{3}){0,4} - 1 到 3 个数字,后跟 0 到 4 个点序列 (\.) 和 3 位数字 (\d{3})
    • | - 或者
    • \d{1,15} - 1 到 15 位数字
  • (?:,\d{1,6})? - 逗号的可选序列(出现 1 次或 0 次)后跟 1 到 6 位数字
  • $ - 字符串结尾

关于c# - 具有最大长度的小数正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36840723/

相关文章:

c# - 强制 Visual Studio 重建依赖项目

c# - 如何在 Metro 应用程序中生成 PDF?

C# - 禁用键盘输入文本框

java - 用于替换的字符串正则表达式

javascript - RegExp 关键字转义

c# - 使用 AllowAnonymous 属性在 Web Api 中进行身份验证

c# - ASP.NET MVC5 从布局访问 ViewBag?

java - 如何用正则表达式分割java字符串?

javascript - 使用字符串中的键/值对创建对象?

c# 正则表达式,只允许数字和字母不起作用