JavaScript, лучший способ сказать, является ли валь одной цифрой
-
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);