Javascript, числовой диапазон проверки формы (мин / макс) - PullRequest
10 голосов
/ 27 апреля 2011

Есть скрипт, который определяет текст как число с использованием регулярного выражения:


function validateTextNumericInRange ( textInputId)
{
    var numRegex = /^[\d]+$/;
    var textInput = document.getElementById(textInputId);

    var valid = true;
    if(numRegex.test(textInput.value) == false) {
        alert('Value must be a number between 3-48');
        valid = false;
        }            
        return valid;   
    }

Необходимо использовать этот формат и указать минимальный / максимальный диапазон (на данный момент произвольный, скажем, от 3 до 48). Как бы я изменил это регулярное выражение, чтобы завершить и иметь правильный аргумент?

Ответы [ 4 ]

10 голосов
/ 28 апреля 2011

Я не понимаю вашего вопроса. Вы хотите сказать, что хотите, чтобы число было от 3 до 48 цифр или чтобы значение было от 3 до 48?

Для последнего вам не нужно регулярное выражение:

function validateTextNumericInRange (textInputId) {
    var textInput = document.getElementById(textInputId);
    var value = parseInt(textInput.value, 10);

    return (!isNaN(value) && value >= 3 && value <= 48);
}

Более общее решение:

function validateTextNumericInRange(textInputId, min, max) {
    var textInput = document.getElementById(textInputId);
    var value = parseInt(textInput.value, 10);

    return (!isNaN(value) && value >= min && value <= max);
}

Чтобы проверить, является ли число длиной от 3 до 48 цифр, вы можете использовать регулярное выражение /^[0-9]{3, 48}$/.

8 голосов
/ 28 апреля 2011

Regex будет жестким и негибким, для вашего примера это будет:

/^(?:[3-9]|[1-3][0-9]|4[0-8])$/

лучше использовать решение Vivins.

3 голосов
/ 02 июля 2012

Я не хороший разработчик JavaScript, но я знаю, что в Java вы можете использовать этот синтаксис для проверки минимальной и максимальной длины:

[1-9][0-9]{2,4}
[1-9][0-9]{min,max}
3 голосов
/ 28 апреля 2011
function isInteger(value) {
  if ((value.toString()).replace(/^-\d|\d/, "").length == 0) {
    return true;
  }
  return false;
}

function integerInRange(value, min, max) {
  if (isInteger(value)) {
    if (parseInt(value, 10) >= min && parseInt(value, 10 <= max)) {
      return true; 
    } else {
      return false; //not in range
    }
  } else {
    return false; //not an integer
  }
}

integerInRange(55, 3, 48);  //returns false
integerInRange("55", 3, 48);  //returns false
integerInRange(25, 3, 48);  //returns true
integerInRange("25", 3, 48);  //returns true

В вашем случае вам нужно было бы назвать это так

integerInRange(document.getElementById(textInputId).value, 3, 48);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...