JavaScript: пытается проверить число, которое должно быть 4 цифры, чтобы увидеть, если х <100 (то есть 0100) - PullRequest
0 голосов
/ 12 сентября 2011

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

Это или действительно очень просто, и я слишком усложняю вещи, или я поступаю неправильно. Я искал везде более 2 часов. Я не совсем нуб в JS, но я все еще новичок, я бы сказал, обучение, аметер ?? Anywho ....

что я пытаюсь сделать:

, поэтому у меня есть поле ввода чисел <input type="number" maxlength="4" .../>, где пользователь вводит четырехзначное число (должно быть 4 цифры) от 100 до 8000. Поэтому очевидно, что от 100 до 999 будет 0100 - 0999.

пока проблем нет, я могу просто использовать строку для передачи переменной в виде 4 цифр.

Проблема в том, что мне нужно добавить определенные условия для проверки ввода. одно условие беспокоит меня. вот что у меня есть:

(переменная x уже установлена ​​в поле ввода формы и номера)

if (x=="" || isNaN(x) || x.length!== 4 && x< 0100 || x>8000)<br> {alert(please enter the correct amount!}<br> else {run rest of function}

так что все они работают за исключением: x<0100

если пользователь вводит 99, он помечается, потому что это не 4 цифры, а если он вводит 0099, он принимает его и выполняет остальную часть кода функции.

Мне просто нужно, чтобы предупредить на любую сумму от 0001 до 0099.

я нашел другой пост, Как сделать 8-значное число в javascript? , вроде как, но парень просто хочет вывести число, дополненное нулями. я думаю, что одно из решений (код ниже) может быть полезным для меня, но, поскольку я довольно устал, измучен мозгами и нов, я не могу решить его:

var i = (100).toPrecision(8).split('.').reverse().join('');

я бы начал с редактирования:

var i = (x).toPrecision(4).split('.').reverse().join('');

(но это сработало бы, если бы они набрали 99, а не 0099 ... если вы понимаете, о чем я)

Я думаю, что это будет похоже на обратную сторону кода (разделение от 0099 до 99.00), и тогда выражение будет: if(.... && i<==99 || ....), но не знаю, как написать это в JS ...

хорошо, вы понимаете, как это портит мне сознание, будучи полу / ежеквартальным нубом и все такое !!

извините, он не отформатирован правильно и так долго, я не понял, как использовать функции кода ...

и спасибо за ваше терпение, прочитав это (если вы зашли так далеко, хе-хе).

СПАСИБО ЗА ПРЕДЕЛА

Slappy-х

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

Число 0100 будет рассматриваться как восьмеричное значение (которое является 64 в десятичном виде).

Я думаю, что вы бы справились, просто сравнив строки:

x < "0100" || x > "8000"

В противном случае вам нужно преобразовать x в число и сравнить его с 100:

+x < 100 || +x > 8000

(на самом деле вам не нужно явно преобразовывать x, но это тоже не повредит и проясняет, какие типы данных вы сравниваете)

Обновление: И вы должны заменить && на ||, насколько я вижу.

0 голосов
/ 12 сентября 2011

Попробуйте использовать комбинацию этих методов.

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

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

После подтверждения, что вы имеете дело с номером, вы можете дополнить его (при необходимости) следующим образом:

function pad(num, size) {
    var s = "000" + num;
    return s.substr(s.length-size);
}

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

0 голосов
/ 12 сентября 2011

Чтобы проверить, находится ли x между 0001 и 0099, вы можете сделать это

if (x.match(/00([1-9][0-9]|0[1-9])/))
...