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

时间:2018-12-26 13:21:58

标签: javascript jquery regex

我需要一个正则表达式,以使

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

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

  1. 小数点是可选的。
  

允许输入50位数字,不带小数点。

例如,它应与以下数字匹配:

12345678901234567890123456789012345678901234567890 12345.123456789012345678901234567890123456789012345

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

2 个答案:

答案 0 :(得分: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);
}));

答案 1 :(得分:2)

您可以使用此正则表达式,如果.2是有效的,而2.是有效的,则它将匹配数字从1到50的整数,或者匹配长度为2到51的十进制数。无效。

^(?:\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