regex Javacsrript正则表达式与最多10位数和可选2个小数点的数字匹配

vuktfyat  于 2022-11-18  发布在  Java
关注(0)|答案(2)|浏览(313)

我已经尝试了下面的正则表达式来验证数字与以下条件
/^\d{3,10}(\.\d{2})?$/
a、数字最少3位,最多10位(含.),可以包含.和两位小数点
示例

有效数字

123
1234
12345
123456
1234567
12345678
123456789
1234567890
123.00
1234.02
12345.03
123456.04
1234567.05

无效数字

1
12
1.11
1.1111
12345678.12
但是我的正则表达式在1234567890.00的情况下失败

wtlkbnrh

wtlkbnrh1#

您可以用途:

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

说明

  • ^字符串开头
  • (?![.\d]{11}$)负lookahead,Assert字符串结尾之前不存在11个或更多数字或点
  • \d{3,10}匹配3-10位数字
  • (?:\.\d\d)?可选地匹配.和2个数字
  • $字符串结束

请参见regex demo

ctzwtxfj

ctzwtxfj2#

我发现您对3到10个数字(包括.)的描述与您的无效示例1.11(包含3个字符(数字和.))存在矛盾
下面是一个测试正则表达式,假设你想测试3到10个字符(数字和.):

const input = [
  '123',
  '1234',
  '12345',
  '123456',
  '1234567',
  '12345678',
  '123456789',
  '1234567890',
  '1.23',
  '123.00',
  '1234.02',
  '12345.03',
  '123456.04',
  '1234567.05',
  '1',
  '12',
  '1.1111',
  '1.22.33',
  '12345678.12',
  '1234567890.00'
];
const regex = /^(?=.{3,10}$)\d+(\.\d{2})?$/;
input.forEach(str => {
  let valid = regex.test(str);
  console.log(str + ' => ' + valid);
});

输出量:

123 => true
1234 => true
12345 => true
123456 => true
1234567 => true
12345678 => true
123456789 => true
1234567890 => true
1.23 => true
123.00 => true
1234.02 => true
12345.03 => true
123456.04 => true
1234567.05 => true
1 => false
12 => false
1.1111 => false
1.22.33 => false
12345678.12 => false
1234567890.00 => false

正则表达式说明:

  • ^-字符串的开头
  • (?=.{3,10}$)-Assert3到10个字符的正前瞻
  • \d+-- 1个以上字符
  • (\.\d{2})?-可选的.nn模式
  • $-字符串结尾

相关问题