我正在尝试实现用于验证负数的正则表达式。这是我的尝试。
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 = "";
}
});
我希望输入内容删除除负数以外的所有内容。但是出于某些原因,也允许使用正数。我在这里想念什么?
我希望我的输入仅接受负整数(最好不包含零)。
答案 0 :(得分:3)
您在正则表达式中缺少右括号。您的样本最初给出了错误:
SyntaxError:括号未结束
您的正则表达式:
/^((\-(\d*))$/
那是三个开头的括号,两个结尾的括号。
应该是:
/^(\-(\d*))$/
看看:添加了结束括号,它现在可以按预期运行。
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*
匹配零个或多个数字$
声明字符串的结尾
const strings = [
"100",
"10",
"1",
"0",
"-0",
"-1",
"-2",
"-100"
];
let pattern = /^-[1-9]\d*$/;
strings.forEach((s) => {
console.log(s + " ==> " + pattern.test(s));
});