দশমিক সংখ্যা নিয়মিত প্রকাশ, যেখানে দশমিকের পরে অঙ্ক digitচ্ছিক


112

আমার একটি নিয়মিত প্রকাশ দরকার যা একটি সংখ্যা যাচাই করে তবে দশমিকের পরে অঙ্কের প্রয়োজন হয় না। অর্থাত।

123
123.
123.4

সব বৈধ হবে

123..

অবৈধ হবে

যে কোনও প্রশংসিত হবে!


: সেরা উত্তর এখানে stackoverflow.com/a/39399503/715269
Gangnus

উত্তর:


190

নিম্নলিখিত ব্যবহার:

/^\d*\.?\d*$/
  • ^ - লাইনের শুরু;
  • \d* - 0 বা তার বেশি সংখ্যা;
  • \.?- একটি alচ্ছিক বিন্দু (পালানো, কারণ রেগেক্সে, .একটি বিশেষ চরিত্র);
  • \d* - 0 বা তার বেশি সংখ্যা (দশমিক অংশ);
  • $ - লাইনের শেষ।

এটি 0.5.র মতো শীর্ষস্থানীয় শূন্যের পরিবর্তে .5 দশমিকের জন্য অনুমতি দেয়


2
@ ওরেঞ্জডগ, আপনার আসল মেলগুলি পছন্দসই চেয়ে বেশি matches উদাহরণস্বরূপ 'গাভী 3.45 টর্নেডো';)
এস। আলবানো

39
এটি একটি একক ডটের সাথেও মেলে যা কোনও বৈধ দশমিক সংখ্যা নয়। একটি ভাল রেজেক্স এমনটি হবে /^\d*\.?\d+$/যা দশমিক পয়েন্টের পরে একটি অঙ্ককে বাধ্য করবে।
চন্দ্রনশু

2
@ চন্দ্রনশু এবং এটি একটি খালি স্ট্রিংয়ের সাথে মেলে যা আপনার পরিবর্তনটিও সমাধান করবে solve
ওঝাজা

2
@ চন্দ্রাংশু "দশমিকের পরে কোনও অঙ্কের প্রয়োজন হয় না"
অরেঞ্জডোগ

3
এই সমাধান কাজ করে না। এটি দশমিকের দরকার হয় যখন ওপি স্পষ্টভাবে বলে: decচ্ছিক দশমিক।
অ্যালেক্স জি

113
/\d+\.?\d*/

এক বা একাধিক সংখ্যা ( \d+), periodচ্ছিক সময়কাল ( \.?), শূন্য বা আরও বেশি অঙ্ক ( \d*)।

আপনার ব্যবহার বা রেজেক্স ইঞ্জিনের উপর নির্ভর করে আপনার শুরু / শেষ লাইন অ্যাঙ্কারগুলি যুক্ত করতে হতে পারে:

/^\d+\.?\d*$/

নিয়মিত প্রকাশের ভিজ্যুয়ালাইজেশন

ডিবাগেক্স ডেমো


12
হ্যাঁ, তবে শীর্ষে ভোট দেওয়া উত্তরটি ভুল, এটি উভয় .এবং খালি স্ট্রিংয়ের সাথে মেলে ।
অরেঞ্জডগ

1
@ গাঙ্গনাস নরও এটি "" ডিজিট "মেলানো উচিত বলেছে না। তারা যদি এটি চেয়েছিল, তবে তাদের বলা উচিত ছিল।
অরেঞ্জডগ

2
@EqualityInTech আমি নিশ্চিত যে এটি না - এটির কোনও গ্রুপিং নেই।
অরেঞ্জডগ

1
হুম ... আমি মনে করি আমি যেমন মন্দ কাজগুলি করেছি ঠিক তেমন বুঝতে পারি না। দুঃখিত।
জেডিবি এখনও মনিকা

1
@ আলেকজান্ডাররয়ান ব্যাগেট এই প্রশ্নের সাথে মিলিত হ'ল ঠিক কীভাবে নির্দিষ্ট করেছে। আপনি দেখতে পাচ্ছেন এটি মোটেও অন্তর্ভুক্ত -নয়।
অরেঞ্জডগ

74

এটি যথাযথভাবে সম্পাদন করতে আপনার নীচের মত একটি নিয়মিত মত প্রকাশের প্রয়োজন:

/^[+-]?((\d+(\.\d*)?)|(\.\d+))$/

প্রসারিত পরিবর্তক (পার্ল দ্বারা সমর্থিত) ব্যবহার করে হোয়াইটস্পেসের সাথে একই অভিব্যক্তি:

/^  [+-]? ( (\d+ (\.\d*)?)  |  (\.\d+) ) $/x

বা মন্তব্য সহ:

/^           # Beginning of string
 [+-]?       # Optional plus or minus character
 (           # Followed by either:
   (           #   Start of first option
     \d+       #   One or more digits
     (\.\d*)?  #   Optionally followed by: one decimal point and zero or more digits
   )           #   End of first option
   |           # or
   (\.\d+)     #   One decimal point followed by one or more digits
 )           # End of grouping of the OR options
 $           # End of string (i.e. no extra characters remaining)
 /x          # Extended modifier (allows whitespace & comments in regular expression)

উদাহরণস্বরূপ, এটি মিলবে:

  • 123
  • 23,45
  • 34।
  • .45
  • -123
  • -273,15
  • -42।
  • -.45
  • +516
  • +9,8
  • +2।
  • +.5

এবং এই অ-সংখ্যাগুলি প্রত্যাখ্যান করবে:

  • । (একক দশমিক পয়েন্ট)
  • -। (negativeণাত্মক দশমিক পয়েন্ট)
  • + +। (প্লাস দশমিক পয়েন্ট)
  • (খালি স্ট্রিং)

সহজ সমাধানগুলি ভুলভাবে বৈধ সংখ্যাগুলি প্রত্যাখ্যান করতে পারে বা এই নন-সংখ্যাগুলির সাথে মেলে।


1
সেরা কারণ এটি একটি পিরিয়ড (42.) এর পরে সংখ্যার সাথে মেলে। তবে এটির সাথে মেলে একটি বাগ / মিথ্যা পজিটিভ রয়েছে: 3 .... 3 যা $ $ শুরু এবং শেষের অক্ষরগুলি প্রয়োগ করতে আরও দুটি বন্ধনী যুক্ত করে স্থির করা যেতে পারে: / ^ ([+ -]? (\ D + (\ । \ d *)?) | (\। \ d +)) $ /
পিট অ্যালভিন

1
ধন্যবাদ পিট, ভাল দাগযুক্ত। উত্তর এখন সংশোধন করা হয়েছে, অতিরিক্ত প্রথম বন্ধনী যুক্ত করে যাতে এটি যেমন ইচ্ছা তেমন আচরণ করে। এটি এখন যেমন লেখা হয় ^A?(B|C)$। পূর্বে, এটি এর মতো লেখা হয়েছিল ^A?B|C$যার অর্থ আসলে (^A?B)|(C$)যা ভুল ছিল। দ্রষ্টব্য: ^(A?B|C)$এছাড়াও ভুল, কারণ এর প্রকৃত অর্থ ^((A?B)|(C))$যা "+.5" এর সাথে মেলে না।
হোলেন

2
এটি সেরা উত্তর। অন্যান্য উত্তরগুলি সমস্ত ক্ষেত্রে পরিচালনা করে না। আমি নিজেও অনুরূপ কাজটি ব্যতীত আমি অনুপস্থিত-অঙ্কের মামলাগুলি হ্যান্ডেল করার জন্য তাকাতে ব্যবহার করি: /^sel+- উত্তর????\\d)\.\d)\d*(\.\d*)?$ /
ফিলহারভি

1
এটি এখানে একমাত্র সঠিক রেজেক্স। তবে কিছু লোক "34." এর সাথে একমত নন। আমি * এর পরিবর্তে দ্বিতীয়
ডিয়ের

1
এটি 0000.2 এর সাথেও মেলে যা সম্ভবত পছন্দসই নয়।
অ্যারন জোরেল

11

এই রেজেক্স ব্যবহার করে দেখুন:

\d+\.?\d*

\ D + ঐচ্ছিক দশমিক সামনে ডিজিটের
।? alচ্ছিক দশমিক (
দশমিকের পরে quচ্ছিক) qu d * alচ্ছিক অঙ্কগুলি


1
নাহ, সেটির কোনও মিল নেই123.
বার্ট কায়ার্স

1
নোটের জন্য ধন্যবাদ। আমার রেজেক্সে পরিবর্তন হয়েছে।
কাশ

4
প্রকৃতপক্ষে, কিন্তু এখন আপনি এটি ইতিমধ্যে অন্য কেউ পোস্ট করেছেন যা এটিকে সম্পাদনা করেছেন। আরও একটি "সঠিক" উত্তর সরাতে বিবেচনা করুন।
বার্ট কায়ার্স

10

আমি মনে করি এটি সবচেয়ে ভাল কারণ এটি সমস্ত প্রয়োজনীয়তার সাথে মেলে:

^\d+(\\.\d+)?$

1
আমার জন্য এটি সর্বোত্তম উত্তর, যেহেতু স্ট্রিং: "৪" (উদাহরণস্বরূপ) কমপক্ষে রুবি ভাষায় কোনও বৈধ সংখ্যা নয়। তবে, সর্বাধিক উত্সাহিত উত্তরগুলি "4" গ্রহণ করে " একটি সংখ্যার regex হিসাবে, যা ভুল।
ভিক্টর

3

আমি নিম্নলিখিত ব্যবহার করে শেষ:

^\d*\.?\d+$

এটি নিম্নলিখিতটি অবৈধ করে তোলে:

.
3.

আপনি কোন ভাষাটি ব্যবহার করছেন তার উপর নির্ভর করে আপনার প্রয়োজন হতে পারে স্ল্যাশ। উদাহরণস্বরূপ: /^\d*\.?\d+$/
চার্লস ন্যাকসিও

এটি অনুমতি দেবে.3
রাই নমির



2

এটাই আমি করেছি। এটি উপরের যে কোনওটির চেয়ে বেশি কঠোর (এবং কিছুটির চেয়ে বেশি সঠিক):

^0$|^[1-9]\d*$|^\.\d+$|^0\.\d*$|^[1-9]\d*\.\d*$

স্ট্রিংগুলি যা পাস:

0
0.
1
123
123.
123.4
.0
.0123
.123
0.123
1.234
12.34

স্ট্রিংগুলি যা ব্যর্থ হয়:

.
00000
01
.0.
..
00.123
02.134

2
^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$

লোকেরা সাধারণত একটি সুগঠিত দশমিক সংখ্যা হিসাবে কী মনে করে তা প্রতিফলিত করা উচিত।

দশমিক পয়েন্টের পূর্বে অঙ্কগুলি হয় একক অঙ্কের হতে পারে, এক্ষেত্রে এটি 0 থেকে 9 অবধি বা একাধিক অঙ্কের হতে পারে, সেক্ষেত্রে এটি 0 দিয়ে শুরু করতে পারে না।

দশমিক চিহ্নের আগে যদি কোনও অঙ্ক উপস্থিত থাকে তবে দশমিক এবং এর পরে অঙ্কগুলি alচ্ছিক। অন্যথায়, একটি দশমিক উপস্থিত থাকতে হবে তারপরে কমপক্ষে একটি অঙ্কের। দ্রষ্টব্য যে একাধিক পিছনে 0 এর দশমিক বিন্দুর পরে অনুমোদিত।

grep -E '^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$'

সঠিকভাবে নিম্নলিখিতগুলির সাথে মেলে:

9
0
10
10.
0.
0.0
0.100
0.10
0.01
10.0
10.10
.0
.1
.00
.100
.001

পাশাপাশি তাদের স্বাক্ষরযুক্ত সমতুল্য, যেখানে এটি নিম্নলিখিতগুলি প্রত্যাখ্যান করে:

.
00
01
00.0
01.3

এবং তাদের স্বাক্ষরযুক্ত সমতুল্য পাশাপাশি খালি স্ট্রিং।


1
(?<![^d])\d+(?:\.\d+)?(?![^d])

পরিষ্কার এবং সহজ।

এটি প্রত্যয় এবং উপসর্গ, RegEx বৈশিষ্ট্য ব্যবহার করে।

এটি সরাসরি সত্য দেয় - ইসম্যাচ শর্তের জন্য মিথ্যা


1
^\d+(()|(\.\d+)?)$

এ নিয়ে এসেছি। পূর্ণসংখ্যা এবং দশমিক উভয়কেই অনুমতি দেয় তবে আপনি দশমিক প্রবেশ করানোর সিদ্ধান্ত নিলে একটি সম্পূর্ণ দশমিক (শীর্ষস্থানীয় এবং পেছনের সংখ্যা) জোর করে।


1

আপনি যা জিজ্ঞাসা করেছেন সেটির উত্তর ইতিমধ্যে দেওয়া হয়েছে সুতরাং optionচ্ছিক দশমিক বিন্দু প্রবেশ করা হলে যারা কেবলমাত্র 2 দশমিক সংখ্যা চান তাদের জন্য এটি কেবলমাত্র একটি অতিরিক্ত তথ্য:

^\d+(\.\d{2})?$

^: স্ট্রিংটির শুরু
\ d: একটি অঙ্ক ([0-9] এর সমান)
+: এক এবং সীমাহীন সময়

ক্যাপচারিং গ্রুপ (। \ D {2})?
? : শূন্য এবং এক বার : চরিত্র।
\ d: একটি অঙ্ক ([0-9] এর সমান)
{2}: ঠিক 2 বার
$: স্ট্রিংয়ের শেষ

1: ম্যাচ
123: ম্যাচ
123.00: ম্যাচ
123.: কোনও ম্যাচ
123 ..: কোনও মিল নেই
123.0: কোনও মিল নেই
123.000: কোনও মিল নেই
123.00.00: কোনও মিল নেই


এই কি নেতিবাচক সংখ্যা মেলে?
আলেকজান্ডার রায়ান ব্যাগেট

1
@ আলেকজান্ডাররাইন ব্যাগেট আপনার নেতিবাচক চিহ্নটি পরীক্ষা করতে হবে তাই এটি হ'ল: ^ -? \ D + (\। \ D {2})? $
পারসি জ্যাক

0

পার্লে, রেজিএক্সএক্স :: সাধারণ ব্যবহার করুন যা আপনাকে আপনার নির্দিষ্ট নম্বর বিন্যাসের জন্য একটি সূক্ষ্ম সুরযুক্ত নিয়মিত এক্সপ্রেশন একত্রিত করার অনুমতি দেবে। আপনি যদি পার্ল ব্যবহার না করেন তবে উত্পন্ন নিয়মিত প্রকাশটি এখনও অন্য ভাষা ব্যবহার করতে পারে।

Regexp :: সাধারণ :: সংখ্যাতে উদাহরণ হিসাবে নিয়মিত এক্সপ্রেশন তৈরির ফলাফল মুদ্রণ করা হচ্ছে:

$ perl -MRegexp::Common=number -E 'say $RE{num}{int}'
(?:(?:[-+]?)(?:[0123456789]+))

$ perl -MRegexp::Common=number -E 'say $RE{num}{real}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[-+]?)(?:[0123456789]+))|))

$ perl -MRegexp::Common=number -E 'say $RE{num}{real}{-base=>16}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789ABCDEF])(?:[0123456789ABCDEF]*)(?:(?:[.])(?:[0123456789ABCDEF]{0,}))?)(?:(?:[G])(?:(?:[-+]?)(?:[0123456789ABCDEF]+))|))

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