当前位置: 首页 > 知识库问答 >
问题:

最大长度小数的正则表达式

萧永望
2023-03-14

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

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

当然还有其他中间值:

1.234,121,01...


共有3个答案

柴宝
2023-03-14

试试这个:^[\d\. \,]{1,15}([\.\,]\d{0,6})? $

林蕴藉
2023-03-14

把它作为替代品扔掉。在我看来,在这种情况下你不应该使用正则表达式。为什么?因为实际匹配问题的正则表达式不容易理解。

这个问题有更简单的解决方案。举个例子:

var input = "1.234.567.890,123456";
var input2 = Regex.Replace(input, @"[^\d,]+", "");

var split = input2.Split(',');
var totalLength = split[0].Length + split[1].Length;

没什么特别的。但与目前提供的其他解决方案不同,它是可行的。

但是不同的文化背景又如何呢?不同的文化使用不同的分隔符。这是一个类似双重的地方。TryParse可以进来:

var input = "1.234.567.890,123456";

var style = NumberStyles.Number;
var culture = CultureInfo.CreateSpecificCulture("nl-NL");

double result;
if (double.TryParse(input, style, culture, out result))
{
    Console.WriteLine("It worked!");
}
else
{
    Console.WriteLine("Not valid");
}

上述方法之所以有效,是因为nl-nl文化使用该格式。将其设置为en US,则会失败。

两者都没有真正使用正则表达式来完成工作,但它们仍然可以产生预期的结果。

齐修贤
2023-03-14

我想你需要

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

查看正则表达式演示

整数部分仅允许1到15位数字(或5组用数字分组符号分隔的3位数据块),并可选择后跟逗号和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位

 类似资料:
  • 我想验证一个数字最大长度为13、小数点为2的货币字符串。我用逗号作为十进制分隔符,用句点作为千位分隔符。 我有一个正则表达式: For sintax有效,但不适用于最大长度。我需要在这个正则表达式中添加什么? 例如,这些字符串必须有效: 这些必须是无效的:

  • 我在寻找一个正则表达式,它允许数字具有小数点后的最大长度。 它应该允许最大16位数字和3位小数,但是最大16位应该包括小数,但不包括。字符。到目前为止,我已经尝试过了:,除了允许17个单个数字之外,它很接近,而它应该只接受16个。如果我将更改为,它会破坏小数。 可接受值: 123 123.3 123.45 123.456 1111111111111.345(共16个数字) 111111111111

  • 问题内容: 我一直认为,Java的regex-API(以及与此相关的许多其他语言)中的后置断言必须具有明显的长度。因此,STAR和PLUS量词在内部回顾中是不允许的。 优秀的在线资源regular-expressions.info似乎证实了我的一些假设: “ […] Java通过允许有限重复而向前迈进了一步。你仍然不能使用星号或加号,但是可以使用问号和花括号以及指定的max参数。Java认识到有限

  • 我有一个正则表达式,最多允许6个小数(“.”是小数分隔符) 我还想设置最大长度条件,以便用户只能输入12位数字,最大长度应排除“.”我如何使用正则表达式做到这一点。

  • 我需要根据给定条件验证输入, -总长度必须为20个字符-前五个位置必须是字母-剩余的应该是数字,但必须存在一个连字符(-),该连字符只能出现在数字之间。我喜欢正则表达式 但它也允许在结尾使用连字符,甚至可以不使用连字符。

  • 我正在尝试构建一个正则表达式,它接受具有以下条件的域名: 允许DNS名称(仅允许连字符、句点和字母数字字符)最多255个字符 连字符只能出现在字母之间 应该以字母开头,以字母结尾。它至少有3个字符(字母和句点必填,连字符可选)。 周期前标签的长度应为63 可能的情况: a、 b.c a-a.b 不该通过的案子 a-b q wert q wert q wert q wert q wert q wer