【问题标题】:Is is possible in regex to allow float numbers between 0 and 2?在正则表达式中是否可以允许 0 到 2 之间的浮点数?
【发布时间】:2019-04-04 12:16:00
【问题描述】:

我需要通过正则表达式验证文本输入。文本输入仅接受 0 到 2 之间的浮点数,否则会通过验证错误。目前我正在使用这个表达式

^\d+\.\d{0,2}$

但它只验证数字(1.0、2.0...)。以下是文本的有效/无效输入。

有效:

  • 0
  • 1
  • 2
  • 0.1
  • 1.9
  • 2.0
  • 0.01
  • 1.09
  • 1.009

无效:

  • -1
  • 3
  • 2.1
  • 2.01
  • 2.001

【问题讨论】:

  • 当正则表达式是你的锤子时,一切看起来都像拇指。为什么不直接转换为浮点数并进行数值比较?
  • 为什么不使用parseFloat()解析它,然后使用<=>=。看起来像:let num = parseFloat(str); let check = isNaN(num) && num>=0 && num<=2;
  • 试试^(?:[01](?:\.\d+)?|2(?:\.0+)?)$demo
  • 可以写正则表达式来匹配pi吗? ????

标签: javascript regex validation numbers


【解决方案1】:

您的模式 ^\d+.\d{0,2}$ 在开始时使用 \d+ 接受 0-9 的 1+ 个数字,因此您应该使用字符类将其限制为 0 或 1。

如果你不打算匹配一个数字后跟一个点,你可以把这部分 .\d{0,2} 变成 \d+ 这样1.0. 这样的值是无效的。

您可以使用交替来做到这一点:

^(?:[01](?:\.\d+)?|2(?:\.0+)?)$

Regex demo

let pattern = /^(?:[01](?:\.\d+)?|2(?:\.0+)?)$/;
["0", "1", "2", "0.1", "1.9", "2.0", "0.01", "1.09", "1.009",
  "0.", "1.", "-1", "3", "2.1", "2.01", "2.001"
].forEach(s => console.log(s + (pattern.test(s) ? " = ok" : " = not ok")));

【讨论】:

    【解决方案2】:

    使用这个正则表达式:

    var regex = /^([01](\.[0-9]+)?|2(\.0+)?)$/;
    
    var tests = [
      "0", "1", "2", "0.1", "1.9", "2.0", "0.01", "1.09", "1.009",
      "-1", "3", "2.1", "2.01", "2.001", "1.", "2."
    ];
    tests.forEach(function(str) {
      console.log(str + " " + (regex.test(str) ? "pass" : "fail"));
    });
    
    document.querySelector("#input1").addEventListener("keyup", function() {
      this.style.backgroundColor = regex.test(this.value) ? "#6F6" : "#F66";
    });
    <input id="input1" placeholder="Enter a number">

    【讨论】:

    • 只需将* 替换为+(尽管2. 应该是有效的)。
    • @junaid 查看修改后的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多