Регулярное выражение для проверки отрицательных чисел в JavaScript

1

Я пытаюсь реализовать регулярное выражение для проверки отрицательных чисел. Вот моя попытка.

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

Я бы ожидал, что ввод удалит все, кроме отрицательных чисел. Но по некоторым причинам допустимы и положительные числа. Что мне здесь не хватает?

Я хочу, чтобы мой вход принимал только отрицательные целые числа (желательно без нуля).

Теги:
validation
input

5 ответов

3
Лучший ответ

В вашем регулярном выражении отсутствует закрытый палец. Первоначально ваш образец выдавал ошибку:

SyntaxError: unterminated в скобках

Ваше регулярное выражение:

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

Это три стартовых парада, два закрывающих пара.

Так должно быть:

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

Взгляните: добавлен заключительный параграф, и он работает так, как ожидалось.

Исправлена ошибка JSFiddle

      if (/^(\-(\d*))$/.test(ct.value)) {
  • 0
    Это была опечатка. Ваше «исправление» все еще допускает положительные числа.
  • 0
    @ WiktorStribiżew Ах, ты прав. Я удалил окружающие парены вместо того, чтобы хранить их, и теперь он ограничивает приращения больше «1».
Показать ещё 6 комментариев
1

Чтобы разрешить отрицательное число и не совпадать с нолем, вы можете использовать:

^-[1-9]\d*$

объяснение

  • ^ Утвердить начало строки
  • [1-9] Соответствует цифре 1-9, поэтому не соответствует 0
  • \d* Соответствует нулю или более цифрам
  • $ Утвердить конец строки

Демо-версия Regex

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

Попробуйте это: он может принимать только отрицательные числа. Нет нулей. Надеюсь, это поможет.

/^-[1-9]+[0-9]*$/
  • 0
    Преимущество использования [1-9] вместо \d не ясно. Не могли бы вы уточнить это, пожалуйста?
  • 0
    Просто чтобы избежать нуля
Показать ещё 2 комментария
1

Вам не нужны никакие круглые скобки, это простое регулярное выражение будет делать то, что вы хотите:

^\-\d*$

Он работает от начала строки, сопоставляя минус и любое количество цифр до конца строки. Это не допустит постов.

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


это регулярное выражение является правильным, хотя я думаю, что вы должны проверить свою скобку.
Проверьте Regex101.com, поскольку это отличный инструмент для тестирования.
Хотя ваш вопрос задает "Номер", я предполагаю, что вам нужны только целые числа, а не плавает?

  • 0
    Да, мне нужны только целые числа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню