Я пытаюсь реализовать регулярное выражение для проверки отрицательных чисел. Вот моя попытка.
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 = "";
}
});
Я бы ожидал, что ввод удалит все, кроме отрицательных чисел. Но по некоторым причинам допустимы и положительные числа. Что мне здесь не хватает?
Я хочу, чтобы мой вход принимал только отрицательные целые числа (желательно без нуля).
В вашем регулярном выражении отсутствует закрытый палец. Первоначально ваш образец выдавал ошибку:
SyntaxError: unterminated в скобках
Ваше регулярное выражение:
/^((\-(\d*))$/
Это три стартовых парада, два закрывающих пара.
Так должно быть:
/^(\-(\d*))$/
Взгляните: добавлен заключительный параграф, и он работает так, как ожидалось.
if (/^(\-(\d*))$/.test(ct.value)) {
Чтобы разрешить отрицательное число и не совпадать с нолем, вы можете использовать:
^-[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));
});
Попробуйте это: он может принимать только отрицательные числа. Нет нулей. Надеюсь, это поможет.
/^-[1-9]+[0-9]*$/
[1-9]
вместо \d
не ясно. Не могли бы вы уточнить это, пожалуйста?
Вам не нужны никакие круглые скобки, это простое регулярное выражение будет делать то, что вы хотите:
^\-\d*$
Он работает от начала строки, сопоставляя минус и любое количество цифр до конца строки. Это не допустит постов.
^(\-(\d*))$
это регулярное выражение является правильным, хотя я думаю, что вы должны проверить свою скобку.
Проверьте Regex101.com, поскольку это отличный инструмент для тестирования.
Хотя ваш вопрос задает "Номер", я предполагаю, что вам нужны только целые числа, а не плавает?