Какое регулярное выражение будет соответствовать этому, начиная с 0,5 до 24 - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу регулярное выражение, которое будет соответствовать этому диапазону: 0.5 - 24 , но не это: 0,5 или 22,5 .На данный момент у меня есть это:

/^(([0-9]|1[0-9]|2[0-3])([^,])(\.(0|5)))$/ 

, но по какой-то причине оно соответствует 22,5, хотя я отрицал ,.Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

С точки зрения регулярных выражений, это будет соответствовать вашим потребностям.

^((0\.[5-9])|(([1-9](\.[5-9])?)|(1[0-9](\.[5-9])?)|(2[0-3](\.[5-9])?)|24))$

Вы можете проверить это здесь

Однако, если вы хотите проверить диапазон, я бы посоветовал вам использовать регулярные выражения только для проверки,число допустимо, а затем преобразуйте его и используйте для проверки обычный javascript.

var validator = function(value) {
  var regexp = /^-?\d+(\.\d{0,2})?$/;
  var isNumber = regexp.test(value);
  if (isNumber) {
    var parsed = parseFloat(value);
    if (0.5 <= parsed && parsed <= 24)
      console.log("The number " + parsed + " is within range");
    else
      console.log("The number " + parsed + " is NOT within range");
  } else {
    console.log("The value " + value + " is NOT even a valid decimal value");
  }
}

validator("-3");
validator("19.6");
validator("22,5");
0 голосов
/ 03 декабря 2018

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

/^([0-9]|1[0-9]|2[0-3])(\.[05])?$/

(\.[05])? <- это позволяет?символ, один или ноль вхождений второй группы захвата. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...