javascript, лучший способ узнать, является ли val одной цифрой - PullRequest
3 голосов
/ 02 октября 2010

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

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

уточнение: я имею в виду один из 0,1,2,3,4,5,6,7,8,9

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

Ответы [ 7 ]

9 голосов
/ 02 октября 2010

Регулярное выражение /\d/ будет соответствовать цифре в любом месте строки, например, "foo1" будет соответствовать "1".

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

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

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

Еще один короткий подход без регулярных выражений:

function isDigit(val) {
  return String(+val).charAt(0) == val;
}
2 голосов
/ 02 октября 2010

Ммм, проверить, равна ли длина строки единице?

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

Это не будет принимать отрицательные числа или числа с десятичными компонентами.

0 голосов
/ 02 октября 2010

Я думаю

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

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

Более чистое решение

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

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

0 голосов
/ 02 октября 2010

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

valAsString.match(/^\d$/)

0 голосов
/ 02 октября 2010

Как насчет этого:

var check = parseFloat(val);
var isSingleDigit = (!isNaN(check) && (check < 10 && check > -10) && check.toString().length ==1);
0 голосов
/ 02 октября 2010

Предполагая, что val уже числовой ...

if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
    // ...
}
0 голосов
/ 02 октября 2010

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

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...