শুধুমাত্র সংখ্যার জন্য রেজেেক্স


309

আমি মোটেই নিয়মিত এক্সপ্রেশন ব্যবহার করি নি, তাই সমস্যা সমাধানে আমার সমস্যা হচ্ছে। আমি চাই যখন কেবল সংযুক্ত স্ট্রিংটি সমস্ত সংখ্যার সাথে থাকে তখনই রেজেক্সটি মেলে; তবে নীচের দুটি উদাহরণের সাথে এটি একটি স্ট্রিংয়ের সাথে মিলছে যা "1234 = 4321" এর মতো সমস্ত সংখ্যার সমান চিহ্ন সহ একটি মিল রয়েছে। আমি নিশ্চিত যে এই আচরণটি পরিবর্তন করার একটি উপায় আছে তবে আমি যেমন বলেছিলাম, নিয়মিত প্রকাশের সাথে আমি সত্যিই খুব বেশি কিছু করতে পারি নি।

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

এটির ক্ষেত্রে, আমি সি # এবং .NET2.0 ব্যবহার করছি।


6
আপনার কি সংখ্যা বা অঙ্কের মিল দরকার ? উদাহরণস্বরূপ: 123.456 একটি সংখ্যা, তবে এটি সমস্ত সংখ্যা নয়।
জোয়েল কোহোর্ন

ঠিক যেমন, ওপি পূর্ণসংখ্যার ব্যবহার সম্পর্কে সম্পূর্ণ পরিষ্কার নয় বা না
সুন রিভার্স

3
ট্রাইপার্স কেন সেই সাধারণ ক্ষেত্রে স্ট্রিংটি নেই? বুল দশমিক T ট্রাই পার্স (স্ট্রিং স্ট্রিং, দশমিক ফলাফল আউট) বা বুল ইন্ট. ট্রাই পার্স (স্ট্রিং স্ট্রিং, আউট রেজাল্ট ফলাফল)
মাকাচ

নিয়মিত প্রকাশের সাথে সংখ্যার পার্সিংয়ের একটি চিকিত্সা চিকিত্সার জন্য এই উত্তরটি দেখুন ।
tchrist

1
সাধারণভাবে, আমার মতে, রেগেক্স এক্সপ্রেশনগুলির সমস্যা সমাধানের সহজতম উপায় হ'ল আপনার ভাষা যদি এটির অনুমতি দেয় (তবে বেশিরভাগ ক্ষেত্রে মনে হয়) তবে একটি কমান্ড লাইন ইন্টারপ্রেটার ব্যবহার করা। যেহেতু এই উদাহরণটি সি # তে রয়েছে, আপনি লিনকপ্যাড.net ব্যবহার করতে পারেন , বা আপনি ডিবাগারে একটি ব্রেকপয়েন্ট ব্যবহার করতে পারেন এবং তারপরে ভিএস-এ ইমিডিয়েট উইন্ডোটি সিএলআই হিসাবে ব্যবহার করতে পারেন।
অ্যান্ড্রু

উত্তর:


478

শুরু এবং শেষ অ্যাঙ্কর ব্যবহার করুন।

Regex regex = new Regex(@"^\d$");

আপনার "^\d+$"যদি একাধিক অঙ্কের সাথে মিলের প্রয়োজন হয় তবে ব্যবহার করুন ।


নোটটি "\d"মেলে [0-9]এবং পূর্বের আরবি সংখ্যাগুলির মতো অন্যান্য অঙ্কের অক্ষর ٠١٢٣٤٥٦٧٨٩"^[0-9]+$"ম্যাচগুলিকে কেবল আরবি সংখ্যা 0 - 9 এ সীমাবদ্ধ করতে ব্যবহার করুন ।


যদি আপনি কোন সাংখ্যিক শুধু সংখ্যার (নতুনদের জন্য দশমিক মান মত) ছাড়া অন্য উপস্থাপনা অন্তর্ভুক্ত করতে হবে, তাহলে দেখতে @tchrist এর রেগুলার এক্সপ্রেশনের সাথে সংখ্যার পার্স ব্যবস্থার ব্যাপক গাইড


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

2
@ নাজিব হ্যাঁ, যেহেতু ভারতীয় জিপ কোডগুলি 6-সংখ্যার সংখ্যা, আপনি এর মতো কিছু ব্যবহার করতে পারেন "^\d{6}$"। কিছু অন্যান্য দেশের জিপ কোডগুলির জন্য আরও জটিল নিয়ম রয়েছে, তাই একাধিক দেশের জন্য রেজেক্স সমাধানগুলিও বেশ জটিল হয়ে উঠতে পারে। স্ট্যাকওভারফ্লো
বিলটি দিন

ইনপুট স্ট্রিংয়ের মতো কিছু হলে কীভাবে আসে: "3 এ" এটি এখনও মিলবে? কেউ কি জানেন যে আমি কীভাবে কেবল এটির সাথে মিলতে পারি যদি সেখানে সংখ্যা থাকে এবং অন্য কিছুই হয় না (আমি মনে করি নেতিবাচক চিহ্ন ছাড়া)। আমি বর্তমানে এটি "-? [0-9] +" এর মতো সেট আপ করেছি।
ম্যাথু

105

আপনার রেজেক্স কোনও সংখ্যার সাথে মিলিত কোনও কিছুর সাথে মিলবে, আপনি পুরো স্ট্রিংয়ের সাথে মিল রেখে অ্যাঙ্কারগুলি ব্যবহার করতে চান এবং তারপরে এক বা একাধিক সংখ্যার সাথে মেলে:

regex = new Regex("^[0-9]+$");

^নোঙ্গর করবে স্ট্রিংয়ের শুরু, $স্ট্রিংয়ের শেষ প্রান্ত নোঙ্গর করা হবে, এবং +এক বা ম্যাচ হবে এটা কি পূর্বে (এই ক্ষেত্রে একটি সংখ্যা) আরও অনেক কিছু।


38

দশমিক পয়েন্ট এবং হাজার মার্কার সহ্য করার প্রয়োজন হলে

var regex = new Regex(@"^-?[0-9][0-9,\.]+$");

আপনার একটি "-" লাগবে, যদি সংখ্যাটি নেতিবাচক হতে পারে।


@ ফ্লোরিন ঘিটা ধন্যবাদ। "-" শুরুতে হওয়া দরকার।
অ্যান্ডি

3
এই রেজেক্সও ভুলভাবে নেতৃস্থানীয় নেতিবাচক চিহ্ন ( -) এবং পিরিয়ড ( .) একাধিকবার হওয়ার অনুমতি দেয় ।
ডেভিডআরআর

5
আপনি মাধ্যমে -এবং .alচ্ছিক করতে পারেন ?-?\d+(?:\.\d+)?পূর্ণসংখ্যা বা দশমিকের সাথে মিলবে। ( ?:প্যারেন্সে থাকা প্যারেন্সকে কেবল একটি নন-ক্যাপচারিং গোষ্ঠী তৈরি করে এবং কেবল স্বচ্ছতার জন্য গোষ্ঠী ব্যবহার করত))
butterywombat

2
এটি 1, .5 এর মতো প্রান্তের ক্ষেত্রে ব্যর্থ হয় তবে আপনি যদি এটি পর্যবেক্ষণ করেন। তবুও এটি -2 এর মতো প্রাথমিক ক্ষেত্রে ব্যর্থ হয়। ^-?[0-9][0-9,\.]*$প্রাথমিক ক্ষেত্রে ব্যর্থতা এড়াতে দয়া করে এটি পরিবর্তন করুন । + * *
বেসরকারী ওমেগা

আমি যে দৃশ্যটি এখানে নিখোঁজ করছি তা হল ইঞ্জিনিয়ারিং নোটেশন (1.2345e-4) সে সম্পর্কে কোনও পরামর্শ?
ওল্ফিফিজ

18

এটি মিলছে কারণ এটি "একটি ম্যাচ" সন্ধান করছে পুরো স্ট্রিংয়ের মিল নয়। স্ট্রিংয়ের শুরু এবং শেষের সন্ধানের জন্য আপনি আপনার রেজিএক্সএক্স পরিবর্তন করে এটি ঠিক করতে পারেন।

^\d+$

16

সম্ভবত আমার পদ্ধতি আপনাকে সাহায্য করবে।

    public static bool IsNumber(string s)
    {
        return s.All(char.IsDigit);
    }

3
যদিও এটি ইউনিকোডক্যাটগরি.ডিসিমাল ডিজিটনম্বার বিভাগের সদস্য যে কোনও চরিত্রের জন্য Char.IsDigitফিরে আসে তা মনে রাখবেন । ওপি যা চায় তা নাও হতে পারে। এছাড়াও দেখুন কেন চর.আইএসডিগিট সেই চরিত্রের জন্য সত্য প্রত্যাবর্তন করে যা অন্তর্ভুক্ত করা যায় না? true
ডেভিডআরআর


16

এটি পূর্ণসংখ্যা এবং দশমিক সংখ্যার সাথে কাজ করে। সংখ্যাটিতে কোমা সহ হাজার বিভাজক থাকলে এটি মিলছে না,

"^-?\\d*(\\.\\d+)?$"

এর সাথে মেলে এমন কয়েকটি স্ট্রিং:

894
923.21
76876876
.32
-894
-923.21
-76876876
-.32

কিছু স্ট্রিং যা না:

hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.

11

^ \ d + $, যা ইংরেজিতে "স্ট্রিংয়ের শুরু", "1 বা আরও বেশি সংখ্যা", "স্ট্রিংয়ের সমাপ্তি"।


10

আপনার যদি সমস্ত অঙ্কগুলি সংখ্যা (0-9) হয় কিনা তা যাচাই করতে হয়,

^[0-9]+$

1425 সত্য

0142 সত্য

0 সত্য

1 সত্য

154a25 মিথ্যা

1234 = 3254 মিথ্যা


10

আমার কাজকর্মটি এখানে:

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

এবং কিছু পরীক্ষা

ইতিবাচক পরীক্ষা:

string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};

নেতিবাচক পরীক্ষা:

string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};

কেবল সি # এর জন্য নয়, জাভা, জাভাস্ক্রিপ্ট এবং পিএইচপি-র সাথেও চেক করা হয়েছে


".3", "3"। আসলে ভাল নম্বর (যথাক্রমে 0.3 এবং 3.0)। আমরা এটি উত্স সিস্টেমে সর্বদা দেখতে পাই এবং আপনার উল্লিখিত ভাষাগুলির বেশিরভাগ_সংখ্যক (এক্সএক্স) ফাংশনগুলি এগুলি সনাক্ত করে সঠিকভাবে রূপান্তর করবে। ধন্যবাদ।
তাগর

1
@ রুসলান আপনি অনেক সিস্টেমে "33", "3" ঠিকই বলেছেন। বৈধ সংখ্যায় পার্স করতে হবে এবং আপনি "0.3" এবং "3.0" উল্লিখিত হিসাবে ব্যবহৃত হবে। তবে অন্যদিকে - এটি রূপান্তরিত মান, সুতরাং আসল মান ".3" এবং "3." সত্যই বিদ্যমান নম্বর নেই।
মেরিনা কে।

9

কুরুচিপূর্ণ বিন্যাসের জন্য দুঃখিত। যে কোনও সংখ্যার জন্য:

[0-9]*

এক বা একাধিক সংখ্যার জন্য:

[0-9]+

7

যদিও উপরোক্ত সমাধানগুলির কোনওটিই আমার উদ্দেশ্যটির জন্য উপযুক্ত নয়, এটি আমার পক্ষে কাজ করেছিল।

var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$";
return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;

বৈধ মানগুলির উদাহরণ: "3", "-3", "0", "0.0", "1.0", "0.7", "690.7", "0.0001", "-555", "945465464654"

বৈধ মানগুলির উদাহরণ: "এ", "", "", "।", "-", "001", "00.2", "000.5", ".3", "3.", "-1" , "- 1", "-1", "-0", "00099", "099"


4

আরেকটি উপায়: আপনি যদি ফার্সী বা আরবি হিসাবে আন্তর্জাতিক সংখ্যার সাথে মিল রাখতে চান, তবে আপনি নিম্নলিখিত বর্ণটি ব্যবহার করতে পারেন:

Regex = new Regex(@"^[\p{N}]+$");

আক্ষরিক সময়ের অক্ষর ব্যবহারের সাথে মেলে:

Regex = new Regex(@"^[\p{N}\.]+$");


3

পূর্ণসংখ্যার এবং ভাসমান পয়েন্ট সংখ্যাগুলির জন্য রেজেেক্স:

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

একটি সংখ্যা একটি পিরিয়ডের সাথে শুরু করতে পারে (শীর্ষস্থানীয় অঙ্কগুলি ছাড়াই) এবং কোনও সংখ্যা একটি পিরিয়ড (শেষের অঙ্কগুলি ছাড়াই) দিয়ে শেষ হতে পারে। উপরে রেজেক্স উভয়কে সঠিক সংখ্যা হিসাবে স্বীকৃতি দেবে।

ক। (পিরিয়ড) কোনও অঙ্ক ছাড়াই নিজেই সঠিক সংখ্যা নয়। সে কারণেই আমাদের সেখানে দুটি রেইগেক্স অংশ প্রয়োজন ("|" দিয়ে আলাদা করা)।

আশাকরি এটা সাহায্য করবে.


1
এটি সর্বাধিক সম্পূর্ণ সমাধান। অভিনন্দন!
রেনাতো মেডিইরোস

2

আমি মনে করি যে এটি একটি সহজতম এবং এটি ইউরোপীয় এবং মার্কিন যুক্তরাষ্ট্রে সংখ্যা লেখার পদ্ধতি গ্রহণ করে যেমন ইউএসএ 10,555.12 ইউরোপীয় 10.555,12 এছাড়াও এটি একের পর একাধিক কমা বা বিন্দুর অনুমতি দেয় না যেমন 10.22 বা 10, .22 এই নম্বর ছাড়াও .55 বা, 55 পাস করবে। এটি সহজ হতে পারে।

^([,|.]?[0-9])+$

1

আপনি যদি কোনও স্ট্রিং থেকে কেবল সংখ্যা বের করতে চান তবে "\ d +" প্যাটার্নটির সাহায্য করা উচিত।


-4

Regex regex = new Regex ("^ [0-9] {1,4} = [0-9] {1,4] $")


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