【问题标题】:Regex - validate decimal number - max 50 digits excluding decimal | decimal optional | any no. of digits allowed before or after decimal [closed]正则表达式 - 验证十进制数 - 最多 50 位不包括小数 |小数可选 |任何没有。小数点前或后允许的位数[关闭]
【发布时间】:2019-05-24 18:04:36
【问题描述】:

我需要一个正则表达式来验证一个十进制数,这样

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

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

  1. 小数点是可选的。

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

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

12345678901234567890123456789012345678901234567890 12345.123456789012345678901234567890123456789012345

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

【问题讨论】:

  • Java 不是 javascript。那么哪种语言
  • 我已经编辑了标签。
  • 有什么理由拒绝投票?
  • 到目前为止你尝试过什么?应该很容易找到一个匹配具有指定长度的数字的正则表达式。
  • @Andreas“应该很容易找到一个匹配指定长度的数字的正则表达式”——除了验证是三倍的。限制总位数并不是唯一的问题。我面临的主要问题是动态检查小数点前和小数点后的位数。意思是如果小数点前有 10 位数字,那么小数点后自动允许 40 位数字。

标签: javascript jquery regex


【解决方案1】:

这是你想要的吗?

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

【讨论】:

  • 我认为他想要最大长度 50 而不是最小长度
  • @DanielE.:你是对的,固定的。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2018-09-08
    • 2022-07-22
    相关资源
    最近更新 更多