تحقق مما إذا كانت السلسلة تحتوي على أرقام فقط
-
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
إذا كانت السلسلة تحتوي على أرقام فقط ، فسيتم إرجاعها فارغًا