代码之家  ›  专栏  ›  技术社区  ›  manymanymore

用于验证负数的正则表达式JavaScript[closed]

  •  1
  • manymanymore  · 技术社区  · 6 年前

    html格式

    <input type="number" id="inC" />
    <div id="outC">
    
    </div>
    

    debugger;
    const failedInput = document.getElementById("inC");
    const textOut = document.getElementById("outC");
    failedInput.addEventListener("input", function(e) {
      const ct = e.currentTarget;
      textOut.innerText = ct.value;
      if (/^((\-(\d*))$/.test(ct.value)) {
    
      } else {
        ct.value = "";
      }
    });
    

    jsfiddle

    我希望输入会删除除负数以外的所有内容。但出于某些原因,正数也是允许的。我错过了什么?

    我希望我的输入只接受负整数(最好不接受零)。

    5 回复  |  直到 5 年前
        1
  •  4
  •   HoldOffHunger Lux    6 年前

    语法错误:未终止的插入式

    /^((\-(\d*))$/
    

    那是三个开始的部分,两个结束的部分。

    应该是:

    /^(\-(\d*))$/
    

    JSFiddle Sample Fixed

          if (/^(\-(\d*))$/.test(ct.value)) {
    
        2
  •  2
  •   The fourth bird    6 年前

    要允许负数而不匹配零,可以使用:

    ^-[1-9]\d*$

    解释

    • ^ 断言字符串的开头
    • [1-9]
    • \d*
    • $ 断言字符串的结尾

    Regex demo

    const strings = [
      "100",
      "10",
      "1",
      "0",
      "-0",
      "-1",
      "-2",
      "-100"
    ];
    let pattern = /^-[1-9]\d*$/;
    
    strings.forEach((s) => {
      console.log(s + " ==> " + pattern.test(s));
    });
        3
  •  1
  •   Ramesh Navi    6 年前

    /^-[1-9]+[0-9]*$/
    
        4
  •  1
  •   J. Rickman    6 年前
     ^(\-(\d*))$ 
    



    退房 Regex101.com
    虽然你的问题要求“数字”,我假设你只需要整数,而不是浮点数?

        5
  •  1
  •   Poul Bak    6 年前

    您根本不需要任何括号,这个更简单的正则表达式可以满足您的需要:

    ^\-\d*$
    

    它从字符串的开头开始工作,匹配一个负号和任意数量的数字,直到字符串的结尾。这将不允许正数。