【问题标题】:Regex for float numbers with two decimals in 0-1 range正则表达式,用于在 0-1 范围内具有两位小数的浮点数
【发布时间】:2020-02-25 15:03:54
【问题描述】:

我正在尝试制作一个 HTML 模式/正则表达式,以仅允许 0 到 1 之间的浮点数,最多两位小数。

所以,以下是正确的:

0
0.1
0.9
0.11
0.99
1

这些都是不正确的:

00
0.111
0.999
1.1
2
10

我对正则表达式一无所知,也不了解它的语法,也没有找到生成正则表达式的在线工具。

我从在线示例中收集到一些东西:

^(0[0-1]|\d)(\.\d{1,2})?$

我添加了0[0-1] 以设置0-1 范围,但它不起作用。此正则表达式匹配 0 到 9 之间的每个数字,也可以有最多 2 个小数。

【问题讨论】:

  • 查看site 来测试你的正则表达式
  • “我对正则表达式一无所知,我也不懂它的语法” 那么不要使用正则表达式。
  • ^(?:0(?:\.\d{1,2})?|1(?:\.00?)?)?$。与here基本相同,但有限定量词。
  • 你用什么语言编程?无论您使用哪种语言,在线手册都会包含有关该语言中正则表达式使用的信息。
  • 1.00 有效吗?和1.000 ?

标签: regex


【解决方案1】:

如果你不习惯RegEx,你可以使用一些代码来检查输入是否符合你的需求,例如:

function ValidateNumber(num)
{
  const floatNumber = Number(num);

  return floatNumber != NaN && 0 <= floatNumber && floatNumber <= 1 && ('' + num).length <= 4;
}

const TestArray = [ '42', 42, 0, '0', '1', '1.00', '1.01', '0.01', '0.99', '0.111', 'zero' ]
TestArray.forEach(function(element) {
  console.log(element + ' is ' + (ValidateNumber(element) ? '' : 'not ') + 'a valid number');
});

【讨论】:

    【解决方案2】:

    尝试使用alternation,其中 0 部分后面可以跟一个可选的点和 2 个数字,而 1 部分后面可以跟一个可选的点和 1 或 2 个零。

    ^(?:0(?:\.\d{1,2})?|1(?:\.0{1,2})?)$
    
    • ^ 字符串开始
    • (?:非捕获组
      • 0(?:\.\d{1,2})? 匹配 0 和可选的点和 1-2 位数字
      • |或者
      • 1(?:\.0{1,2})? 匹配 1 和可选的点和 1-2 个零
    • )关闭群
    • $ 字符串结束

    Regex demo

    【讨论】:

      猜你喜欢
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多