JavaScript, лучший способ сказать, является ли валь одной цифрой

StackOverflow https://stackoverflow.com/questions/3843647

  •  27-09-2019
  •  | 
  •  

Вопрос

Какой лучший способ сказать, если значение в JavaScript является одной цифрой. Я делал что-то вроде

var valAsString = '' + val;
if (valAsString.match(/\d/) {}

Разъяснение: я имею в виду один из 0,1,2,3,4,5,6,7,8,9

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

Это было полезно?

Решение

То /\d/ Regexp будет соответствовать цифру в любой точке строки, например, в "foo1" будет совпадать "1".

Для подхода Regexp нуждается что-то подобное, чтобы строка будет содержать одну цифру:

if (/^\d$/.test(val))  {
  //..
}

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

Еще один короткий подход для нерегеекс:

function isDigit(val) {
  return String(+val).charAt(0) == val;
}

Другие советы

Уммм, проверьте, это ли это длина строки равна одной?

if (typeof(val) === "number")
    {
    var valAsString = val.toString(10);
    if (valAsString.length === 1) {}
    }

Это не примет негативные номера или номера с десятичными компонентами, хотя.

Если вы не хотите включить негативы, это будет работать, как будет ваше решение.

var valAsString = val.toString();
if (valAsString.length === 1) {}

Вы можете просто проверить, находится ли строка от -10 до 10 (при условии, что вы хотите включить негативы). Это будет быстрее, но не будет работать для неигольников, поэтому его, вероятно, лучше всего избежать.

Если вы хотите включить негативы, я бы, наверное, проверил, если номер является целым числом, я бы пошел с чем-то вроде этого:

var isSingleDigitIncludingNegatives = function( arg ) {
    return ((typeof(myNum)=='number') && (myNum.toString().indexOf('.')==-1)) && (( -10 < arg ) && ( arg < 10))

При условии, что val уже числовой ...

if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
    // ...
}

Вы можете использовать ниже модификацию вашего регулярного выражения:

valAsString.match(/^\d$/)

я думаю

(+val + val % 1 + 10) % 10 === val

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

Очистительное решение

typeof val === 'number' && val >>> 0 === val % 10

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

Как насчет чего-то вроде этого:

var check = parseFloat(val);
var isSingleDigit = (!isNaN(check) && (check < 10 && check > -10) && check.toString().length ==1);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top