স্ট্রিংয়ে কেবলমাত্র সংখ্যা রয়েছে কিনা তা পরীক্ষা করুন


324

stringএকটিতে কেবল অঙ্ক রয়েছে কিনা তা আমি পরীক্ষা করতে চাই । আমি এটি ব্যবহার করেছি:

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

if (isANumber){
    ..
}

কিন্তু উপলব্ধি করে যে এটিও অনুমতি দেয় +এবং -। মূলত, আমি নিশ্চিত করতে চাই যে inputএকটিতে কেবলমাত্র অঙ্ক রয়েছে এবং অন্য কোনও অক্ষর নেই। যেহেতু +100এবং -5উভয় সংখ্যা, isNaN()সঠিক পথটি নয়। সম্ভবত একটি regexp আমার কি প্রয়োজন? কোন টিপস?

উত্তর:


644

কেমন

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

1
এটা অসাধারণ! আমি কৌতূহলী \ d দশমিক যে সংখ্যা উল্লেখ না?
ডিওয়ালওয়াল্ড

5
@dewwwald: কিছু কিছু ভাষায় এটা ভিন্নভাবে বাস্তবায়ন কিন্তু জাভাস্ক্রিপ্ট মধ্যে, \dহয় ঠিক সমতূল্য [0-9]
রাই-

এখানে আপনি কীভাবে Regular Expressionsকাজ করবেন সে সম্পর্কে ডকুমেন্টেশন পেতে পারেন
ড্যানফোয়া

6
/^\d*$/পরিবর্তে , যদি আপনি খালি স্ট্রিংটি খুঁজে পান যেখানে কেবল অঙ্ক থাকে
35 Ван

@ ড্রয়ারবার আমার দুর্বল ইংরেজির জন্য আমি দুঃখিত এবং আমাকে এটি পুনরায় প্রচার করতে দিন: "আপনি যদি খালি স্ট্রিংটিকে কেবলমাত্র অঙ্ক হিসাবে বিবেচনা করেন ” "
Ван


16
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false

2
এটি অন্তর্নির্মিত অবজেক্টগুলির প্রোটোটাইপগুলি সংশোধন করার জন্য জাভাস্ক্রিপ্টে খারাপ অনুশীলন হিসাবে বিবেচিত হয়েছে (ভবিষ্যতের ইসিএমএ সংস্করণগুলিতে সামান্য বিস্ময়ের নীতি, এবং সম্ভাব্য দ্বন্দ্ব) - isNumber = () => /^\d+$/.test(this);পরিবর্তে বিবেচনা করুন এবং হিসাবে ব্যবহার করুনconsole.log(isNumber("123123));
নিক বুল

2
এফডব্লিউআইডাব্লু, ২০০৯ সালে যখন এই উত্তরটি পোস্ট করা হয়েছিল, এটি এখনও একটি খারাপ অভ্যাস হিসাবে বিবেচিত হয়নি। JQuery জিততে না পারার আগে, বেশ কয়েকটি jQuery প্রতিযোগী তখন বিদ্যমান ছিল, সমস্ত প্রোটোটাইপ এক্সটেনশন অনুশীলন করেছিল।
বালুপটন

14

যদি আপনি এমনকি ভাসমান মানগুলির (বিন্দু দ্বারা পৃথক করা মান) সমর্থন করতে চান তবে আপনি এই অভিব্যক্তিটি ব্যবহার করতে পারেন:

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

তবে আপনি যদি ফ্লোট না ব্যবহার করেন তবে এটি "" ব্যবহার করে মিথ্যা ফিরে আসবে? "" পরে। "এটি সমাধান করেছেন। আমি এই /^\d+[\.,\,]?\d+$/.test(value সুপারিশ) উভয় কমা এবং বিন্দু দশমিক করার অনুমতি (পরে হয়তো বিন্দু কমা রুপান্তর করতে পারেন)
শুভকামনা

@Lucke, Regex আপনার প্রস্তাবিত শুধুমাত্র আপনাকে প্রথমে পরিবর্তন করেন তাহলে বা দশমিক সঙ্গে সংখ্যাগুলি 9. বেশী এটি সক্ষম হবে \d+থেকে\d*? , এটা 0 মেলে সক্ষম হবে - 9, পাশাপাশি এমন .333 যেমন নম্বর
যা দমকা ভ্যান ডি ওয়াল

5
বন্ধ: var isNumber = /^\d*\.?\d+$/.test(value)- '3.5', '.5', '3' - '3.' এর সাথে মেলে না '
পিটার হোলিংসওয়ার্থ

7

স্ট্রিংয়ে কেবলমাত্র অংক রয়েছে কিনা তা যাচাই করার জন্য এখানে আরও একটি আকর্ষণীয়, পঠনযোগ্য উপায়।

এই পদ্ধতিটি স্প্রেড অপারেটরটি ব্যবহার করে স্ট্রিংটিকে একটি অ্যারেতে বিভক্ত করে কাজ করে এবং তারপরে এটি ব্যবহার করে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


1
এটি trueখালি স্ট্রিং '', এবং একটি খালি অ্যারে [], পূর্ণসংখ্যার অ্যারে [1, 2, 3](একবারে সে <10 হয়) এর জন্যও ফিরে আসবে । /^\d+$/আমি মনে করি বেসিক নিয়মিত প্রকাশের চেয়ে এটি বাগ / অপব্যবহারের ঝুঁকির চেয়ে বেশি
ড্রেনাই


5

নিয়মিত প্রকাশগুলি ব্যবহার না করেই এখানে একটি সমাধান দেওয়া হয়েছে:

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 হল "0" এবং "9" এর জন্য চার্ট কোড।


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

যদিও এটি falseনেতৃস্থানীয় বা অনুসরণীয় শূন্যগুলি সহ স্ট্রিংগুলিতে ফিরে আসবে ।


2

ঠিক আছে, আপনি নিম্নলিখিত রেজেক্স ব্যবহার করতে পারেন:

^\d+$

1

আপনি যদি ভাসমান মানগুলিও অন্তর্ভুক্ত করতে চান তবে আপনি নীচের কোডটি ব্যবহার করতে পারেন

theValue=$('#balanceinput').val();
var isnum1 = /^\d*\.?\d+$/.test(theValue);
var isnum2 =  /^\d*\.?\d+$/.test(theValue.split("").reverse().join(""));
alert(isnum1+' '+isnum2);

এটি কেবল 'এবং' দিয়ে আলাদা করা অঙ্কগুলির জন্য পরীক্ষা করবে। প্রথম পরীক্ষায় 0.1 এবং 0 এর মতো মানগুলিও অন্তর্ভুক্ত করা হবে তবে 1। এটি 0 টিরও অনুমতি দেবে না so সুতরাং আমি যে সমাধানটি প্রস্তাব করব সেটি হল ভ্যালুটিকে বিপরীত করা উচিত তাই 1। 1 হবে then তাহলে একই নিয়মিত অভিব্যক্তিটি এটির অনুমতি দেবে না।

উদাহরণ:

 theValue=3.4; //isnum1=true , isnum2=true 
theValue=.4; //isnum1=true , isnum2=false 
theValue=3.; //isnum1=flase , isnum2=true 

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

যদি কোনও স্ট্রিংয়ে কেবলমাত্র অঙ্ক থাকে তবে এটি বাতিল হয়ে যাবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.