JavaScript ، أفضل طريقة لمعرفة ما إذا كان Val هو رقم واحد
-
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);