正则表达式,用于验证负数JavaScript

时间:2018-10-08 18:12:34

标签: javascript regex validation input

我正在尝试实现用于验证负数的正则表达式。这是我的尝试。

html

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

</div>

js

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 个答案:

答案 0 :(得分:3)

您在正则表达式中缺少右括号。您的样本最初给出了错误:

  

SyntaxError:括号未结束

您的正则表达式:

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

那是三个开头的括号,两个结尾的括号。

应该是:

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

看看:添加了结束括号,它现在可以按预期运行。

JSFiddle Sample Fixed

      if (/^(\-(\d*))$/.test(ct.value)) {

答案 1 :(得分:1)

尝试以下操作:它只能接受负数。也没有零。希望有帮助。

/^-[1-9]+[0-9]*$/

答案 2 :(得分:1)

 ^(\-(\d*))$ 


这个正则表达式是正确的,尽管我认为您应该检查一下括号。
签出Regex101.com,因为它是一个很棒的测试工具。
尽管您的问题要求输入“ Number”,但我假设您只需要整数而不是浮点数?

答案 3 :(得分:1)

您根本不需要任何括号,此更简单的正则表达式将满足您的要求:

^\-\d*$

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

答案 4 :(得分:1)

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

^-[1-9]\d*$

说明

  • ^断言字符串的开头
  • [1-9]匹配1-9的数字,因此不匹配0
  • \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));
});