JavaScript ، أفضل طريقة لمعرفة ما إذا كان Val هو رقم واحد

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 الطريقة الداخلية سوف يتحول إلى لدغة الوسيطة.

نهج آخر قصير غير regexp:

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

نصائح أخرى

ummm ، تحقق مما إذا كان طول السلسلة يساوي واحد؟

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