正则表达式 - 验证十进制数 - 最多50位,不包括小数|十进制可选|任何不。十进制之前或之后允许的数字[关闭]

问题描述 投票:-8回答:2

我需要一个正则表达式,以这种方式验证十进制数

  1. 小数点之前/之后可以存在任意数量的数字。
  2. 整个数字的最大长度为50(不包括小数点)。

例如。如果小数点前有5位数字,则小数点后最多可以存在45位数字。

  1. 小数点是可选的。

允许使用不带小数点的50位数字。

例如,它应匹配这些数字:

12345678901234567890123456789012345678901234567890 12345.123456789012345678901234567890123456789012345

如果有人能在这方面提供帮助,那就太好了!

javascript jquery regex
2个回答
2
投票

那是你要的吗?

^(?:\d{1,50}|(?=.{3,51}$)\d+\.\d+)$

Demo & Explanation

var test = [
    '12345678901234567890123456789012345678901234567890', '12345.123456789012345678901234567890123456789012345',
    '123456.7890',
    '123456789012345678901234567890123456789012345678901',
    '12345678901234567890123456789012345678901234567890.1'
];
console.log(test.map(function (a) {
  return a+' :'+/^(?:\d{1,50}|(?=.{3,51}$)\d+\.\d+)$/.test(a);
}));

2
投票

您可以使用此正则表达式,它将匹配具有1到50之间的数字的整数,或者将匹配长度为2到51的十进制数,假设.2有效但2.无效。

^(?:\d{1,50}|(?=\d*\.\d+$)(?=.{2,51}$)[\d.]*)$

说明:

  • ^ - >字符串的开头
  • (?: - >非团体开始
  • \d{1,50} - >匹配整数长度1到50
  • | - >用于分隔十进制大小写的替代方法
  • (?=\d*\.\d+$) - >确保形式为零或更多的数字后跟一个文字点后跟一个或多个数字
  • (?=.{2,51}$) - >确保位数从2到51
  • [\d.]* - >实际捕获数字
  • ) - >小组结束
  • $ - >字符串结尾

这是一个5-6而不是50-51的正则表达式,所以你可以很容易地玩它。

^(?:\d{1,5}|(?=\d*\.\d+$)(?=.{2,6}$)[\d.]*)$

Demo for max length 5-6

© www.soinside.com 2019 - 2024. All rights reserved.