রুবি ব্যবহার করে কোনও স্ট্রিং মূলত একটি পূর্ণসংখ্যা হলে কীভাবে পরীক্ষা করবেন to


128

আমার একটা ফাংশন দরকার is_an_integer, যেখানে

  • "12".is_an_integer? সত্য ফিরে।
  • "blah".is_an_integer? মিথ্যা প্রত্যাবর্তন

আমি রুবিতে এটি কীভাবে করতে পারি? আমি একটি রেজেক্স লিখব তবে আমি ধরে নিচ্ছি যে এর জন্য কোনও সহায়ক রয়েছে যা আমি অবগত নই।



1
নিয়মিত প্রকাশের উপর নির্ভর করে সমাধানগুলি ব্যবহারে সাবধান হন Be বেঞ্চমার্কগুলি দেখায় যে তারা নিয়মিত কোডের চেয়ে অনেক ধীরে ধীরে চলে।
টিন ম্যান

উত্তর:


135

আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারেন। @ জ্যানমের পরামর্শ সহ ফাংশনটি এখানে।

class String
    def is_i?
       !!(self =~ /\A[-+]?[0-9]+\z/)
    end
end

@ উইচের মন্তব্য অনুসারে একটি সম্পাদিত সংস্করণ:

class String
    def is_i?
       /\A[-+]?\d+\z/ === self
    end
end

যদি আপনাকে কেবল ইতিবাচক সংখ্যাগুলি পরীক্ষা করতে হয় check

  if !/\A\d+\z/.match(string_to_check)
      #Is not a positive number
  else
      #Is all good ..continue
  end  

4
খারাপ না. রুবিতে আপনি সাধারণত "রিটার্ন" কীওয়ার্ডটি বাদ দেন যদি ফাংশনের শেষ অভিব্যক্তিটিতে ফেরতের মান উত্পন্ন হয়। এটি শূন্যের একটি পূর্ণসংখ্যার মানও ফিরিয়ে দেবে, আপনি সম্ভবত বুলিয়ান চান, তাই !! (str = ~ / ^ [- +]? [0-9] + $ /) এটি করবে। তারপরে আপনি এটিকে স্ট্রিংয়ে যুক্ত করতে পারেন এবং "স্ট্রিং" এর পরিবর্তে "স্ব" ব্যবহার করে যুক্তিটি ছেড়ে দিতে পারেন, এবং তারপরে আপনি নামটি "ইস_আই" করতে পারেন? ...
janm

2
ধন্যবাদ! রুবি কনভেনশন এবং অনুশীলন সম্পর্কে আমার কোনও ধারণা নেই। সিনট্যাক্সটি দেখার জন্য আমি রুবি এবং নিয়মিত প্রকাশের জন্য একটি দ্রুত গুগল করেছি, সমস্যাটি হাতের কাছে প্রয়োগ করার জন্য রেজেক্স পরিবর্তন করেছি এবং এটি পরীক্ষা করেছি। এটি আসলে বেশ ঝরঝরে .. যখন আমি অতিরিক্ত অতিরিক্ত সময় পাই তখন আমাকে আরও দীর্ঘ চেহারা দিতে হতে পারে।
রাডো

আপনি সঠিক ধারণা পেয়েছেন তবে এটি বাইনারি বা হেক্স লিটারেলের সাথে মেলে না (নীচে আমার সম্পাদিত সমাধানটি দেখুন)।
সারা মেই

16
দুটি মন্তব্য। আপনি নির্মাণের /regexp/ === selfপরিবর্তে ব্যবহার করতে পারেন !!(self =~ /regexp/)। পরিবর্তে আপনি চরিত্র শ্রেণী '\ ঘ' ব্যবহার করতে পারেন[0-9]
কোনটা

1
একটি পূর্ণসংখ্যার সবচেয়ে সহজ রেজেক্স সম্ভবত / ^ \ d + $ /
কিথেক্সম 23

169

ভাল, এখানে সহজ উপায়:

class String
  def is_integer?
    self.to_i.to_s == self
  end
end

>> "12".is_integer?
=> true
>> "blah".is_integer?
=> false

স্ট্রিংগুলিতে রূপান্তর করতে ব্যতিক্রমের জন্য উত্সাহিত হওয়া সমাধানগুলির সাথে আমি একমত নই - ব্যতিক্রমগুলি নিয়ন্ত্রণ প্রবাহ নয়, এবং আপনি সম্ভবত এটি সঠিক উপায়ে করতে পারেন। এটি বলেছে, উপরের আমার সমাধানটি বেস -10-পূর্ণসংখ্যার সাথে কাজ করে না। সুতরাং ব্যতিক্রমগুলি অবলম্বন না করেই উপায়টি এখানে:

  class String
    def integer? 
      [                          # In descending order of likeliness:
        /^[-+]?[1-9]([0-9]*)?$/, # decimal
        /^0[0-7]+$/,             # octal
        /^0x[0-9A-Fa-f]+$/,      # hexadecimal
        /^0b[01]+$/              # binary
      ].each do |match_pattern|
        return true if self =~ match_pattern
      end
      return false
    end
  end

27
"01" .to_i.to_s! = "01"
sepp2k

2
আপনি প্রতিস্থাপন করা যায়নি self.to_i.to_s == selfসঙ্গে Integer self rescue false?
মেরেডিথ

5
আপনি পারেন, কিন্তু এটি খারাপ ফর্ম হবে। আপনি নিয়ন্ত্রণ প্রবাহ হিসাবে ব্যতিক্রমগুলি ব্যবহার করবেন না এবং কারও কোডে কখনও "রেসকিউ মিথ্যা" (বা "সত্যিকারের উদ্ধার") থাকা উচিত নয়। কিছু সাধারণ gsub'ing আমার সমাধানটি ওপি দ্বারা নির্দিষ্ট না করে প্রান্তের ক্ষেত্রে সমাধান করবে make
সারা মেই

4
আমি জানি অনেক লোক এটি ব্যবহার করে এবং এটি অবশ্যই নান্দনিকভাবে আনন্দদায়ক। আমার কাছে যদিও এটি একটি ইঙ্গিত দেয় যে কোডটির পুনর্গঠন করা দরকার। যদি আপনি কোনও ব্যতিক্রম আশা করে থাকেন ... তবে এটি ব্যতিক্রম নয়।
সারা মেই

2
আমি একমত যে ব্যতিক্রমগুলি নিয়ন্ত্রণ প্রবাহ হিসাবে ব্যবহার করা উচিত নয়। আমি মনে করি না যে প্রয়োজনীয়তাটি বিকাশকারী ওরিয়েন্টেড সংখ্যাগুলি স্বীকৃত হওয়া উচিত। প্রোগ্রামারহীন পরিস্থিতিতে এমন একটি বাগ হিসাবে দেখা যেতে পারে যা বিশেষত শীর্ষস্থানীয় জিরো এবং অষ্টালকে ঘিরে সম্ভাব্য বিভ্রান্তি দেখা যায়। To_i এর সাথেও সামঞ্জস্যপূর্ণ নয়। আপনার কোড "-0123" কেস পরিচালনা করে না। একবার আপনি এই কেসটি পরিচালনা করেন, আপনার অষ্টালের জন্য আলাদা রেজিপ্স্পের প্রয়োজন হবে না। আপনি "যে কোনও?" ব্যবহার করে কেবল আরও এগিয়ে যেতে পারেন। আপনার ফাংশনটিতে কেবলমাত্র বিবৃতি "[/ re1 /, / re2 /, / re3 /] হতে পারে।
জানম

67

আপনি এটি ব্যবহার করতে পারেন Integer(str)এবং এটি উত্থাপিত কিনা তা দেখতে পারেন:

def is_num?(str)
  !!Integer(str)
rescue ArgumentError, TypeError
  false
end

এটি উল্লেখ করা উচিত যে এটি যখন সত্য হয় তবে "01"এটি কার্যকর হয় না "09"কারণ 09এটি একটি বৈধ পূর্ণসংখ্যার আক্ষরিক হবে না। যদি এটি আপনি চান এমন আচরণ না হয় তবে আপনি 10দ্বিতীয় যুক্তি হিসাবে যুক্ত করতে পারেন Integer, তাই সংখ্যাটি সর্বদা বেস 10 হিসাবে ব্যাখ্যা করা হয়।


39
বউ ... একটি সংখ্যা রূপান্তর করার জন্য একটি ব্যতিক্রম উস্কে দিচ্ছে? ব্যতিক্রমগুলি নিয়ন্ত্রণ প্রবাহ নয়।
সারা মেই

29
এগুলি নয়, তবে দুর্ভাগ্যক্রমে রুবিতে একটি স্ট্রিংয়ের "পূর্ণসংখ্যা" নির্ধারণের এটি সাধারণ উপায়। #to_iঅনুমতি দেওয়ার কারণে ব্যবহারের পদ্ধতিগুলি কেবল খুব বেশি ভাঙা।
আভিদি

17
যারা ভাবছেন তাদের জন্য, পূর্ণসংখ্যা ("09") বৈধ নয় কারণ "0" এটিকে অষ্টাল করে তোলে এবং 9 টি একটি বৈধ অষ্টাল সংখ্যা নয়। osdir.com/ML/lang.ruby.general/2002-08/msg00247.html
অ্যান্ড্রু গ্রিম

20
সারাহ: আপনি একটি রেজেক্স ব্যবহার করতে পারেন তবে পূর্ণসংখ্যা (whenণাত্মক সংখ্যা, হেক্স, অক্টাল, আন্ডারস্কোর উদাহরণস্বরূপ 1_000_000) পার্স করার সময় রুবি যে সমস্ত কেসগুলি পরিচালনা করে তা পরিচালনা করতে এটি খুব বড় রেইগেক্স এবং ভুল হওয়া সহজ হবে। Integer()প্রচলিত কারণ এটি Integer ()আপনার পক্ষে নিশ্চিতভাবেই জানেন যে রুবি যে কোনও পূর্ণসংখ্যাকে আক্ষরিক হিসাবে বিবেচনা করে তা গ্রহণযোগ্য হবে এবং সমস্ত কিছু প্রত্যাখ্যান করা হবে। ভাষাটি ইতিমধ্যে আপনাকে যা দেয় তা অনুলিপি করা নিয়ন্ত্রণের জন্য ব্যতিক্রমগুলি ব্যবহার করার চেয়ে যুক্তিযুক্তভাবে আরও খারাপ কোড গন্ধ।
আভিদি

9
@ র্যাডো তাই চাকাটিকে নতুন করে আনছে।
sepp2k

24

আপনি একটি ওলাইনার করতে পারেন:

str = ...
int = Integer(str) rescue nil

if int
  int.times {|i| p i}
end

অথবা এমনকি

int = Integer(str) rescue false

আপনি যা করার চেষ্টা করছেন তার উপর নির্ভর করে আপনি সরাসরি রেসকিউ ক্লজ সহ একটি স্টার্ট এন্ড ব্লকটি ব্যবহার করতে পারেন:

begin
  str = ...
  i = Integer(str)

  i.times do |j|
    puts j
  end
rescue ArgumentError
  puts "Not an int, doing something else"
end

1
"নিয়ন্ত্রণ প্রবাহ হিসাবে ব্যতিক্রম" বিষয়টি সম্পর্কিত: যেহেতু আমরা জানি না যে হাতের পদ্ধতিটি কীভাবে ব্যবহার করতে হবে আমরা ব্যতিক্রমগুলি খাপ খায় কিনা তা সত্য বিচার করতে পারি না। যদি স্ট্রিংটি ইনপুট হয় এবং এটি একটি পূর্ণসংখ্যার হতে হয় তবে একটি অ-পূর্ণসংখ্যা সরবরাহ করা ব্যতিক্রমের নিশ্চয়তা দেয়। তবুও সম্ভবত হ্যান্ডলিং একই পদ্ধতিতে নেই এবং আমরা সম্ভবত কেবল পূর্ণসংখ্যা (স্ট্র) করব times টাইমস {| i | আমি whatever বা যা কিছু রাখে।
রবার্ট ক্লেমে

24
"12".match(/^(\d)+$/)      # true
"1.2".match(/^(\d)+$/)     # false
"dfs2".match(/^(\d)+$/)    # false
"13422".match(/^(\d)+$/)   # true

4
এটা তোলে ফেরত দেয় না trueএবং falseকিন্তু MatchDataদৃষ্টান্ত এবংnil
স্টিফান

এটি যা প্রত্যাবর্তন করে তা নয়, তবে এটি যদি মেলে
ম্যাকিয়েজ ক্রেসোস্কি

5
সঙ্গে এটি মোড়ানো !!বা ব্যবহারের present?আপনি একটি বুলিয়ান প্রয়োজন !!( "12".match /^(\d)+$/ )বা "12".match(/^(\d)+$/).present?(আধুনিক প্রয়োজন পাগল / activesupport)
mahemoff

1
এই নিয়মিত অভিব্যক্তি অ্যাকাউন্টে কোনও সাইন নেয় না: negative ণাত্মক সংখ্যাগুলিও বৈধ পূর্ণসংখ্যার সংখ্যা । আপনি এখন বৈধ প্রাকৃতিক সংখ্যা বা শূন্যের জন্য পরীক্ষা করছেন ।
জোহেম শুলেনক্লাপ্পার

13

রুবি ২..0.০ ব্যতিক্রম না বাড়িয়ে পূর্ণসংখ্যায় কাস্টিং সক্ষম করে এবং nilকাস্ট ব্যর্থ হলে ফিরে আসবে । এবং যেহেতু nilবেশিরভাগ falseরুবির মতোই আচরণ করে , আপনি সহজেই এর মতো পূর্ণসংখ্যার জন্য পরীক্ষা করতে পারেন:

if Integer(my_var, exception: false)
  # do something if my_var can be cast to an integer
end

8
class String
  def integer?
    Integer(self)
    return true
  rescue ArgumentError
    return false
  end
end
  1. এটি উপসর্গযুক্ত নয় is_। আমি প্রশ্নোত্তর পদ্ধতিতে যে নির্বোধ, আমি "04".integer?তার চেয়ে অনেক বেশি পছন্দ করি "foo".is_integer?
  2. এটি sepp2k দ্বারা বোধগম্য সমাধান ব্যবহার করে, যা "01"এরকম এবং এরূপ হয়ে যায়।
  3. অবজেক্ট ওরিয়েন্টেড, ইয়ে।

1
এটির নামকরণের জন্য +1 + এন্টিজার ?, স্ট্রিং-এর সাথে তালগোল পাকানোর জন্য -1 :
পি

1
আর কোথায় যাবে? integer?("a string")ftl।
আগস্ট লিলিয়াস 21

2
String#integer?প্রতিটি রুবি কোডার এবং তাদের কাজিনকে ভাষাতে যুক্ত করতে পছন্দ করার মতো ধরণের সাধারণ প্যাচটি হ'ল তিনটি সাবলেটলি বেমানান বাস্তবায়ন এবং অপ্রত্যাশিত ভাঙ্গন সহ কোডবেসগুলিতে নেতৃত্ব দেয়। আমি বড় রুবি প্রকল্পগুলিতে এই কঠিন উপায়ে শিখেছি।
আভিদি

উপরের মত একই মন্তব্য: নিয়ন্ত্রণ প্রবাহের জন্য ব্যতিক্রমগুলি ব্যবহার করা উচিত নয়।
সারা মেই

ডাউনসাইড: এই সমাধানটি একটি রূপান্তর নষ্ট করছে।
রবার্ট ক্লেমে

7

সেরা এবং সহজ উপায় ব্যবহার করা হয় Float

val = Float "234" rescue nil

Float "234" rescue nil #=> 234.0

Float "abc" rescue nil #=> nil

Float "234abc" rescue nil #=> nil

Float nil rescue nil #=> nil

Float "" rescue nil #=> nil

Integerএছাড়াও ভাল তবে এটির 0জন্য ফিরে আসবেInteger nil


আমি আপনার উত্তর লক্ষ্য করেছি খুশি। নইলে আমার "ফ্লোট" দরকার হলে আমি "পূর্ণসংখ্যার" সাথে চলে যেতাম।
জেফ জিভকোভিক

এটি সহজ তবে সেরা উত্তর! আমাদের বেশিরভাগ ক্ষেত্রে স্ট্রিং ক্লাসে অভিনব প্যাচ দরকার নেই। এটি আমার পক্ষে সবচেয়ে ভাল কাজ করে!
আনহ এনগুইন

(ভাসা (মান) রেসকিউ মিথ্যা)? ভাসা (মান)। To_s == মান? ভাসা (মান): পূর্ণসংখ্যা (মান): মান
lলিভি

6

আমি পছন্দ করি:

কনফিগ / initializers / string.rb

class String
  def number?
    Integer(self).is_a?(Integer)
  rescue ArgumentError, TypeError
    false
  end
end

এবং তারপর:

[218] pry(main)> "123123123".number?
=> true
[220] pry(main)> "123 123 123".gsub(/ /, '').number?
=> true
[222] pry(main)> "123 123 123".number?
=> false

বা ফোন নম্বর পরীক্ষা করুন:

"+34 123 456 789 2".gsub(/ /, '').number?

4

অনেক সহজ উপায় হতে পারে

/(\D+)/.match('1221').nil? #=> true
/(\D+)/.match('1a221').nil? #=> false
/(\D+)/.match('01221').nil? #=> true

3
  def isint(str)
    return !!(str =~ /^[-+]?[1-9]([0-9]*)?$/)
  end

কোডের উত্তরগুলি খুব কার্যকর নয়। পরিবর্তে এটি কীভাবে কার্যকর হয় এবং কেন এটি উপযুক্ত উত্তর তা ব্যাখ্যা সরবরাহ করুন। আমরা ভবিষ্যতের জন্য শিক্ষিত করতে চাই যাতে সমাধানটি বোঝা যায়, তাত্ক্ষণিক প্রশ্নের সমাধান নয়।
টিন ম্যান

3

ব্যাক্তিগতভাবে আমি ব্যতিক্রম পদ্ধতির পছন্দ করি যদিও আমি এটিকে কিছুটা পরিশ্রুত করে তুলব:

class String
  def integer?(str)
    !!Integer(str) rescue false
  end
end

তবে অন্যরা যেমন ইতিমধ্যে জানিয়েছে, এটি অষ্টাল স্ট্রিংয়ের সাথে কাজ করে না।


2

রুবি ২.৪ এর রয়েছে Regexp#match?: (ক ?)

def integer?(str)
  /\A[+-]?\d+\z/.match? str
end

পুরানো রুবি সংস্করণগুলির জন্য, রয়েছে Regexp#===। এবং যদিও ক্ষেত্রে সাম্যতা অপারেটরের সরাসরি ব্যবহার এড়ানো উচিত, এটি এখানে খুব পরিষ্কার দেখাচ্ছে:

def integer?(str)
  /\A[+-]?\d+\z/ === str
end

integer? "123"    # true
integer? "-123"   # true
integer? "+123"   # true

integer? "a123"   # false
integer? "123b"   # false
integer? "1\n2"   # false

2

এটি সহজভাবে ব্যবহার করে সমস্ত ক্ষেত্রে উপযুক্ত নাও হতে পারে:

"12".to_i   => 12
"blah".to_i => 0

কিছু জন্য হতে পারে।

যদি এটি একটি সংখ্যা এবং 0 নয় তবে এটি একটি নম্বর ফেরত দেবে। যদি এটি 0 প্রদান করে তবে এটি স্ট্রিং বা 0 হয়।


11
কাজ করে তবে এটি প্রস্তাবিত নয়, যেহেতু "12blah".to_i => 12। এটি অদ্ভুত পরিস্থিতিতে কিছুটা সমস্যা তৈরি করতে পারে।
rfsbraz

2

এখানে আমার সমাধান:

# /initializers/string.rb
class String
  IntegerRegex = /^(\d)+$/

  def integer?
    !!self.match(IntegerRegex)
  end
end

# any_model_or_controller.rb
'12345'.integer? # true
'asd34'.integer? # false

এবং এটি কীভাবে কাজ করে তা এখানে:

  • /^(\d)+$/যে কোনও স্ট্রিংয়ের অঙ্কগুলি খুঁজে পাওয়ার জন্য রেজেক্স এক্সপ্রেশন। আপনি আপনার রেজেক্স এক্সপ্রেশন এবং ফলাফল http://rubular.com/ এ পরীক্ষা করতে পারেন ।
  • আমরা IntegerRegexযখনই পদ্ধতিতে এটি ব্যবহার করি তখন অপ্রয়োজনীয় মেমরির বরাদ্দ এড়াতে আমরা অবিচ্ছিন্নভাবে এটি সংরক্ষণ করি ।
  • integer?একটি জিজ্ঞাসা পদ্ধতি যা আসতে হবে trueবা false
  • matchস্ট্রিংয়ের একটি পদ্ধতি যা আর্গুমেন্টে প্রদত্ত রেজেক্স এক্সপ্রেশন অনুসারে সংঘটনগুলির সাথে মেলে এবং মিলিত মানগুলি বা ফেরত দেয় nil
  • !!matchপদ্ধতির ফলাফলকে সমতুল বুলিয়ান রূপান্তর করে ।
  • এবং বিদ্যমান Stringক্লাসে পদ্ধতিটি ঘোষণা করা হচ্ছে বানর প্যাচিং, যা বিদ্যমান স্ট্রিং কার্যকারিতাতে কোনও কিছুই পরিবর্তন করে না, তবে কেবল integer?স্ট্রিং অবজেক্টের নামে অন্য একটি পদ্ধতি যুক্ত করে ।

1
আপনি এই দয়া করে একটি সামান্য ব্যাখ্যা যোগ করতে পারেন?
স্টেফ

@ স্টেফ - আমিও তাই করেছি। আপনার যদি এখনও কোনও জিজ্ঞাসা থাকে তবে দয়া করে আমাকে জানান।
শচীন

1

উপরে উপরে @ রাডোর জবাব প্রসারিত করা ডাবল ব্যাংস ব্যবহার না করে সত্য বা মিথ্যা বুলেটিয়ানদের ফিরে আসতে বাধ্য করার জন্য একটি ত্রৈমাসিক বিবৃতিও ব্যবহার করতে পারে। মঞ্জুর, ডাবল লজিকাল নেগ্রেশন সংস্করণটি আরও সংক্ষিপ্ত, তবে সম্ভবত নতুনদের জন্য পড়া আমার পক্ষে (আমার মতো) বেশি শক্ত।

class String
  def is_i?
     self =~ /\A[-+]?[0-9]+\z/ ? true : false
  end
end

বিবেচনা করুন যে নিয়মিত এক্সপ্রেশন ব্যবহার করে রুবিকে আরও অনেক বেশি কাজ করতে বাধ্য করে তাই যদি এটি কোনও লুপে ব্যবহৃত হয় তবে কোডটি ধীর হয়ে যাবে। অভিব্যক্তিটি অ্যাঙ্কর করা সহায়তা করে তবে রেজেক্স এখনও উল্লেখযোগ্যভাবে ধীর er
টিন ম্যান

1

আরও সাধারণীকরণের ক্ষেত্রে (দশমিক পয়েন্ট সহ সংখ্যা সহ), আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন:

def number?(obj)
  obj = obj.to_s unless obj.is_a? String
  /\A[+-]?\d+(\.[\d]+)?\z/.match(obj)
end

আপনি কোনও আইআরবি সেশনে এই পদ্ধতিটি পরীক্ষা করতে পারেন:

(irb)
>> number?(7)
=> #<MatchData "7" 1:nil>
>> !!number?(7)
=> true
>> number?(-Math::PI)
=> #<MatchData "-3.141592653589793" 1:".141592653589793">
>> !!number?(-Math::PI)
=> true
>> number?('hello world')
=> nil
>> !!number?('hello world')
=> false

এখানে জড়িত রেজেক্সের বিশদ ব্যাখ্যার জন্য, এই ব্লগ নিবন্ধটি পরীক্ষা করে দেখুন :)


কল করার প্রয়োজন নেই obj.is_a? Stringকারণ স্ট্রিং # টু_স নিজেই ফিরে আসবে, যা আমার ধারণা .is_a?কলটির সাথে তুলনা করে খুব বেশি প্রসেসিংয়ের প্রয়োজন হবে না । এইভাবে, আপনি এই লাইনে একটি বা দু'জনের পরিবর্তে কেবলমাত্র একটি কল করবেন। এছাড়াও, আপনি সরাসরি পদ্ধতির !!অভ্যন্তরে অন্তর্ভুক্ত করতে পারেন number?, কারণ কনভেনশন অনুসারে, এমন একটি পদ্ধতির নাম যা শেষ হয় ?বুলিয়ান মানটি প্রত্যাবর্তন করে। শুভেচ্ছা সহ!
জিওভান্নি বেনুসি

-1

আমি নীচেরটি পছন্দ করি, সরাসরি এগিয়ে:

def is_integer?(str)
  str.to_i != 0 || str == '0' || str == '-0'
end

is_integer?('123')
=> true

is_integer?('sdf')
=> false

is_integer?('-123')
=> true

is_integer?('0')
=> true

is_integer?('-0')
=> true

যত্নবান যদিও:

is_integer?('123sdfsdf')
=> true

-2

এক লাইনার ভিতরে string.rb

def is_integer?; true if Integer(self) rescue false end

-3

আমি নিশ্চিত নই যে এই প্রশ্নটি যখন জিজ্ঞাসা করা হয়েছিল তখনই এটি ছিল কিনা তবে যে কেউ এই পোস্ট জুড়ে হোঁচট খায় তার পক্ষে সহজতম উপায়:

var = "12"
var.is_a?(Integer) # returns false
var.is_a?(String) # returns true

var = 12
var.is_a?(Integer) # returns true
var.is_a?(String) # returns false

.is_a? যে কোনও বস্তুর সাথে কাজ করবে।


এটিই মূল প্রশ্নটি নয়। ওপি জানতে চায় যে স্ট্রিংটিও একটি পূর্ণসংখ্যা হয় কিনা। যেমন "12".is_an_integer? == true "not12".is_an_integer? == false 12.is_an_integer? == true
মার্কার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.