Возможно ли в регулярном выражении разрешить числа с плавающей точкой от 0 до 2? - PullRequest
0 голосов
/ 04 апреля 2019

Мне нужно проверить ввод текста через выражение регулярного выражения.Ввод текста допускает только числа с плавающей запятой от 0 до 2, иначе это из-за ошибки проверки.В настоящее время я использую это выражение

^\d+\.\d{0,2}$

Но оно проверяется только на числах (1.0, 2.0 ...).Ниже приведены допустимые / недействительные данные для ввода текста.

Действительный:

  • 0
  • 1
  • 2
  • 0,1
  • 1,9
  • 2,0
  • 0,01
  • 1,09
  • 1,009

Недействительно:

  • -1
  • 3
  • 2,1
  • 2,01
  • 2.001

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Ваш шаблон ^\d+.\d{0,2}$ принимает 1+ цифр от 0-9 в начале, используя \d+, поэтому вы должны ограничить его до 0 или 1, используя класс символов.

Если вы не собираетесь сопоставлять цифру, за которой следует одна точка, вы можете превратить эту часть .\d{0,2} в \d+, чтобы значения типа 1. или 0. были недействительными.

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

^(?:[01](?:\.\d+)?|2(?:\.0+)?)$

Regex demo

let pattern = /^(?:[01](?:\.\d+)?|2(?:\.0+)?)$/;
["0", "1", "2", "0.1", "1.9", "2.0", "0.01", "1.09", "1.009",
  "0.", "1.", "-1", "3", "2.1", "2.01", "2.001"
].forEach(s => console.log(s + (pattern.test(s) ? " = ok" : " = not ok")));
1 голос
/ 04 апреля 2019

Используйте это регулярное выражение:

var regex = /^([01](\.[0-9]+)?|2(\.0+)?)$/;

var tests = [
  "0", "1", "2", "0.1", "1.9", "2.0", "0.01", "1.09", "1.009",
  "-1", "3", "2.1", "2.01", "2.001", "1.", "2."
];
tests.forEach(function(str) {
  console.log(str + " " + (regex.test(str) ? "pass" : "fail"));
});

document.querySelector("#input1").addEventListener("keyup", function() {
  this.style.backgroundColor = regex.test(this.value) ? "#6F6" : "#F66";
});
<input id="input1" placeholder="Enter a number">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...