整个正则表达式模式的长度

Length of entire regex pattern

我尝试检测一个值是最大长度为 10 个字符的 int 还是 float。

我的最佳解决方案是 (^[0-9]{0,10}$|^([0-9]+\.[0-9]+){1,10}$),但 10 个字符的最大长度不适用于浮点数。

在另一个解决方案中 {^[0-9]{0,10}$|^[0-9\.]{0,10}$ 最大长度有效,但如果值以“.”开头或结尾,正则表达式似乎有效。

如何控制整个模式的长度?

我会在这里使用交替来涵盖整数(没有小数点)和浮点数(有小数点):

^(?:\d{1,10}|(?![\d.]{11,})\d+\.\d+)$

Demo

下面是上述正则表达式的细分:

^                   from the start of the input
    (?:\d{1,10}     match 1 to 10 digits, no decimal point
    |               OR
    (?![\d.]{11,})  assert that we DON'T see more than 10 digits/decimal point
    \d+\.\d+)       then match a floating point number (implicitly 10 chars max)
$                   end of the input

如果您的正则表达式引擎具有正前瞻性,您可以这样做

(?=^.{1,10}$)(^[0-9]+(\.[0-9]+)?$)