整个正则表达式模式的长度
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+)$
下面是上述正则表达式的细分:
^ 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]+)?$)
我尝试检测一个值是最大长度为 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+)$
下面是上述正则表达式的细分:
^ 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]+)?$)