تحقق مما إذا كانت السلسلة تحتوي على أرقام فقط

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

  •  21-09-2019
  •  | 
  •  

سؤال

أريد التحقق مما إذا أ string يحتوي على أرقام فقط. لقد استخدمت هذا:

var isANumber = isNaN(theValue) === false;

if (isANumber){
    ..
}

لكنه أدرك أنه يسمح أيضًا + و -. في الأساس ، أريد أن أتأكد من input يحتوي على أرقام فقط وليس أحرف أخرى. حيث +100 و -5 كلا الرقمين ، isNaN() ليست هي الطريقة الصحيحة للذهاب. ربما regexp هو ما أحتاجه؟ أي نصائح؟

هل كانت مفيدة؟

المحلول

ماذا عن

var isnum = /^\d+$/.test(val);

نصائح أخرى

string.match(/^[0-9]+$/) != null;
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false

إذا كنت ترغب في دعم القيم العائمة (القيم المنفصلة للنقطة) ، فيمكنك استخدام هذا التعبير:

var isNumber = /^\d+\.\d+$/.test(value);

هذا ما تريده انت

function isANumber(str){
  return !/\D/.test(str);
}

إليك طريقة أخرى مثيرة للاهتمام وقابلة للقراءة للتحقق مما إذا كانت السلسلة تحتوي على أرقام فقط.

تعمل هذه الطريقة عن طريق تقسيم السلسلة إلى صفيف باستخدام مشغل انتشار, ثم يستخدم every() طريقة لاختبار ما إذا كانت جميع العناصر (الأحرف) في الصفيف يتم تضمينها في سلسلة الأرقام '0123456789':

const digits_only = string => [...string].every(c => '0123456789'.includes(c));

console.log(digits_only('123')); // true
console.log(digits_only('+123')); // false
console.log(digits_only('-123')); // false
console.log(digits_only('123.')); // false
console.log(digits_only('.123')); // false
console.log(digits_only('123.0')); // false
console.log(digits_only('0.123')); // false
console.log(digits_only('Hello, world!')); // false

حسنًا ، يمكنك استخدام Regex التالي:

^\d+$

فيما يلي حل دون استخدام تعبيرات منتظمة:

function onlyDigits(s) {
  for (let i = s.length - 1; i >= 0; i--) {
    const d = s.charCodeAt(i);
    if (d < 48 || d > 57) return false
  }
  return true
}

حيث 48 و 57 هي رموز char لـ "0" و "9" ، على التوالي.

function isNumeric(x) {
    return parseFloat(x).toString() === x.toString();
}

على الرغم من أن هذا سيعود false على الأوتار مع الأصفار الرائدة أو الزائدة.

c="123".match(/\D/) == null #true
c="a12".match(/\D/) == null #false

إذا كانت السلسلة تحتوي على أرقام فقط ، فسيتم إرجاعها فارغًا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top