যদি আমার কাছে এই স্ট্রিং থাকে:
"abc"
=false
"123"
=true
"ab2"
=false
একটি কমান্ড, মত IsNumeric()
বা অন্য কিছু আছে কি এটি সনাক্ত করতে পারে যে স্ট্রিংটি একটি বৈধ সংখ্যা?
যদি আমার কাছে এই স্ট্রিং থাকে:
"abc"
= false
"123"
= true
"ab2"
= false
একটি কমান্ড, মত IsNumeric()
বা অন্য কিছু আছে কি এটি সনাক্ত করতে পারে যে স্ট্রিংটি একটি বৈধ সংখ্যা?
উত্তর:
int n;
bool isNumeric = int.TryParse("123", out n);
সি # 7 হিসাবে আপডেট করুন :
var isNumeric = int.TryParse("123", out int n);
অথবা যদি আপনার নম্বর না লাগে তবে আপনি আউট প্যারামিটারটি বাতিল করতে পারেন
var isNumeric = int.TryParse("123", out _);
Var গুলি তাদের নিজ নিজ ধরনের দ্বারা প্রতিস্থাপিত করা যেতে পারে!
public static bool IsNumeric(this string text) { double _out; return double.TryParse(text, out _out); }
এটি সত্য হলে ফিরে আসবে input
সমস্ত সংখ্যা এটি । এটির চেয়ে আরও ভাল কিনা তা আপনি জানেন না তবে এটি কার্যকর TryParse
হবে।
Regex.IsMatch(input, @"^\d+$")
যদি আপনি কেবল জানতে চান যে এটির একটি বা একাধিক সংখ্যক চরিত্রের সাথে মিশে আছে, তবে এটি ছেড়ে দিন ^
+
এবং $
।
Regex.IsMatch(input, @"\d")
সম্পাদনা: আসলে আমি মনে করি এটি ট্রাই পার্সির চেয়ে ভাল কারণ একটি খুব দীর্ঘ স্ট্রিং সম্ভবত ট্রাই পার্সিকে ওভারফ্লো করতে পারে।
RegexOptions.Compiled
যদি সম্ভাব্য গতি বাড়ানোর জন্য হাজার হাজার চালাচ্ছেন তবে আপনি প্যারামিটার হিসাবে যুক্ত করতে পারেনRegex.IsMatch(x.BinNumber, @"^\d+$", RegexOptions.Compiled)
.
আপনি এটি ব্যবহার করতে পারেন:
stringTest.All(char.IsDigit);
এটি true
সমস্ত সংখ্যার অঙ্কের জন্য (না float
) এবং ফিরে আসবেfalse
যদি ইনপুট স্ট্রিংটি কোনও ধরণের আলফানিউমেরিক হয়।
দয়া করে নোট করুন : stringTest
খালি স্ট্রিং হওয়া উচিত নয় কারণ এটি সংখ্যার হওয়ার পরীক্ষায় উত্তীর্ণ হবে।
..--..--
একটি বৈধ সংখ্যা হিসাবে পাস করবে । স্পষ্টভাবে না।
আমি এই ফাংশনটি বেশ কয়েকবার ব্যবহার করেছি:
public static bool IsNumeric(object Expression)
{
double retNum;
bool isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
return isNum;
}
তবে আপনি ব্যবহার করতে পারেন;
bool b1 = Microsoft.VisualBasic.Information.IsNumeric("1"); //true
bool b2 = Microsoft.VisualBasic.Information.IsNumeric("1aa"); // false
থেকে স্থির করা মাপকাঠি IsNumeric বিকল্প
(উত্স: aspalliance.com )
(উত্স: aspalliance.com )
এটি সম্ভবত সি # এর সেরা বিকল্প।
আপনি যদি জানতে চান যে স্ট্রিংটিতে একটি পুরো সংখ্যা রয়েছে (পূর্ণসংখ্যা):
string someString;
// ...
int myInt;
bool isNumerical = int.TryParse(someString, out myInt);
ট্রাইপার্স পদ্ধতিটি স্ট্রিংটিকে একটি সংখ্যায় (পূর্ণসংখ্যার) রূপান্তরিত করার চেষ্টা করবে এবং এটি সফল হলে এটি সত্য ফিরে আসবে এবং মাই আইএনটেতে সংশ্লিষ্ট নম্বরটি রাখবে। যদি এটি না পারে তবে এটি মিথ্যা প্রত্যাবর্তন করবে।
int.Parse(someString)
অন্যান্য প্রতিক্রিয়াগুলিতে প্রদর্শিত বিকল্প ব্যবহার করে সমাধানগুলি কাজ করে তবে এটি অনেক ধীর কারণ ব্যতিক্রম ছোঁড়া খুব ব্যয়বহুল। TryParse(...)
সংস্করণ 2-তে সি # ভাষায় যুক্ত করা হয়েছিল এবং তারপরেও আপনার কোনও পছন্দ ছিল না। এখন আপনি করেন: সুতরাং আপনার এড়ানো উচিতParse()
বিকল্পটি ।
আপনি যদি দশমিক সংখ্যা গ্রহণ করতে চান, দশমিক শ্রেণীর একটি .TryParse(...)
পদ্ধতিও রয়েছে। উপরের আলোচনায় দশমিকের সাথে পূর্ণ প্রতিস্থাপন করুন এবং একই নীতিগুলি প্রয়োগ হয়।
প্রশ্নে থাকা স্ট্রিংটি পাস হবে কিনা তা দেখতে আপনি অনেকগুলি ডেটাটাইপগুলির জন্য সর্বদা বিল্ট ট্রাইপার্স পদ্ধতি ব্যবহার করতে পারেন।
উদাহরণ।
decimal myDec;
var Result = decimal.TryParse("123", out myDec);
ফলাফল তখন = সত্য
decimal myDec;
var Result = decimal.TryParse("abc", out myDec);
ফলাফল তখন = মিথ্যা
আপনি যদি ইন্টি পার্স বা ডাবল. পার্স ব্যবহার করতে না চান তবে আপনি এই জাতীয় কিছু দিয়ে নিজের রোল করতে পারেন:
public static class Extensions
{
public static bool IsNumeric(this string s)
{
foreach (char c in s)
{
if (!char.IsDigit(c) && c != '.')
{
return false;
}
}
return true;
}
}
যদি আপনি সংখ্যার বিস্তৃত বর্ণালী ধরতে চান তবে পিএইচপি'র এই_সংখ্যক , আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:
// From PHP documentation for is_numeric
// (http://php.net/manual/en/function.is-numeric.php)
// Finds whether the given variable is numeric.
// Numeric strings consist of optional sign, any number of digits, optional decimal part and optional
// exponential part. Thus +0123.45e6 is a valid numeric value.
// Hexadecimal (e.g. 0xf4c3b00c), Binary (e.g. 0b10100111001), Octal (e.g. 0777) notation is allowed too but
// only without sign, decimal and exponential part.
static readonly Regex _isNumericRegex =
new Regex( "^(" +
/*Hex*/ @"0x[0-9a-f]+" + "|" +
/*Bin*/ @"0b[01]+" + "|" +
/*Oct*/ @"0[0-7]*" + "|" +
/*Dec*/ @"((?!0)|[-+]|(?=0+\.))(\d*\.)?\d+(e\d+)?" +
")$" );
static bool IsNumeric( string value )
{
return _isNumericRegex.IsMatch( value );
}
ইউনিট পরীক্ষা:
static void IsNumericTest()
{
string[] l_unitTests = new string[] {
"123", /* TRUE */
"abc", /* FALSE */
"12.3", /* TRUE */
"+12.3", /* TRUE */
"-12.3", /* TRUE */
"1.23e2", /* TRUE */
"-1e23", /* TRUE */
"1.2ef", /* FALSE */
"0x0", /* TRUE */
"0xfff", /* TRUE */
"0xf1f", /* TRUE */
"0xf1g", /* FALSE */
"0123", /* TRUE */
"0999", /* FALSE (not octal) */
"+0999", /* TRUE (forced decimal) */
"0b0101", /* TRUE */
"0b0102" /* FALSE */
};
foreach ( string l_unitTest in l_unitTests )
Console.WriteLine( l_unitTest + " => " + IsNumeric( l_unitTest ).ToString() );
Console.ReadKey( true );
}
মনে রাখবেন যে একটি মান সংখ্যাসূচক হওয়ায় এর অর্থ এই নয় যে এটি একটি সংখ্যার প্রকারে রূপান্তরিত হতে পারে। উদাহরণস্বরূপ, "999999999999999999999999999999.9999999999"
একটি নিখুঁত বৈধ সংখ্যাযুক্ত মান, তবে এটি। নেট নেট সংখ্যাযুক্ত (মানক লাইব্রেরিতে সংজ্ঞায়িত নয়, এটি) এর সাথে খাপ খায় না।
আমি জানি এটি একটি পুরানো থ্রেড, তবে উত্তরের কোনও উত্তরই আমার পক্ষে সত্যই হয়নি - হয় অদক্ষ, না সহজে পুনরায় ব্যবহারের জন্য এনক্যাপসুলেটেড। আমি এটিও নিশ্চিত করতে চেয়েছিলাম যে স্ট্রিংটি খালি বা শূন্য থাকলে এটি মিথ্যা ফিরে এসেছে। ট্রাইপার্স এক্ষেত্রে সত্য ফিরে আসে (একটি নম্বর হিসাবে পার্স করার সময় একটি খালি স্ট্রিং ত্রুটি ঘটায় না)। সুতরাং, এখানে আমার স্ট্রিং এক্সটেনশন পদ্ধতি:
public static class Extensions
{
/// <summary>
/// Returns true if string is numeric and not empty or null or whitespace.
/// Determines if string is numeric by parsing as Double
/// </summary>
/// <param name="str"></param>
/// <param name="style">Optional style - defaults to NumberStyles.Number (leading and trailing whitespace, leading and trailing sign, decimal point and thousands separator) </param>
/// <param name="culture">Optional CultureInfo - defaults to InvariantCulture</param>
/// <returns></returns>
public static bool IsNumeric(this string str, NumberStyles style = NumberStyles.Number,
CultureInfo culture = null)
{
double num;
if (culture == null) culture = CultureInfo.InvariantCulture;
return Double.TryParse(str, style, culture, out num) && !String.IsNullOrWhiteSpace(str);
}
}
ব্যবহার করা সহজ:
var mystring = "1234.56789";
var test = mystring.IsNumeric();
অথবা, আপনি যদি অন্য ধরণের সংখ্যা পরীক্ষা করতে চান তবে আপনি 'স্টাইল' নির্দিষ্ট করতে পারেন। সুতরাং, কোনও সংখ্যককে কোনও এক্সপোজনটির সাথে রূপান্তর করতে, আপনি এটি ব্যবহার করতে পারেন:
var mystring = "5.2453232E6";
var test = mystring.IsNumeric(style: NumberStyles.AllowExponent);
অথবা একটি সম্ভাব্য হেক্স স্ট্রিং পরীক্ষা করতে আপনি ব্যবহার করতে পারেন:
var mystring = "0xF67AB2";
var test = mystring.IsNumeric(style: NumberStyles.HexNumber)
Cultureচ্ছিক 'সংস্কৃতি' প্যারামিটারটি একইভাবে ব্যবহার করা যেতে পারে।
এটি ডাবলটিতে থাকা বড় স্ট্রিংগুলিকে রূপান্তর করতে সক্ষম না হয়ে এটি সীমাবদ্ধ, তবে এটি একটি সীমাবদ্ধ প্রয়োজনীয়তা এবং আমি মনে করি আপনি যদি এর চেয়েও বড় সংখ্যার সাথে কাজ করে থাকেন তবে আপনার সম্ভবত অতিরিক্ত বিশেষ সংখ্যার হ্যান্ডলিংয়ের প্রয়োজন হবে যাইহোক ফাংশন।
যদি আপনি যাচাই করতে চান যে স্ট্রিংটি একটি সংখ্যা কিনা (আমি ধরে নিচ্ছি এটি একটি স্ট্রিং যেহেতু এটি একটি সংখ্যা, দুহ, আপনি জানেন যে এটি একটি)।
আপনিও করতে পারেন:
public static bool IsNumber(this string aNumber)
{
BigInteger temp_big_int;
var is_number = BigInteger.TryParse(aNumber, out temp_big_int);
return is_number;
}
এটি স্বাভাবিক নাস্টির যত্ন নেবে:
BigInteger.Parse("3.3")
একটি ব্যতিক্রম ছুঁড়ে ফেলা হবে এবং এটির TryParse
জন্য মিথ্যাও ফিরে আসবে)Double.TryParse
আপনাকে আপনার ক্লাসের উপরে একটি রেফারেন্স যুক্ত করতে হবে System.Numerics
এবং
using System.Numerics;
ভাল করতে হবে (ভাল, দ্বিতীয়টি আমার ধারণা বোনাস :)
আমার ধারণা এই উত্তরটি অন্য সমস্তগুলির মধ্যে হারিয়ে যাবে, তবে যাইহোক, এখানে যায়।
আমি কারণ আমি যদি কোন চেক করতে চেয়েছিলেন Google এর মাধ্যমে এই প্রশ্নে শেষ পর্যন্ত string
ছিল numeric
যাতে আমি শুধু ব্যবহার করতে পারে double.Parse("123")
পরিবর্তে TryParse()
পদ্ধতি।
কেন? কারন পার্স ব্যর্থ হয়েছে কিনা তা জানার আগে একটি out
পরিবর্তনশীল ঘোষণা করতে এবং ফলাফলটি পরীক্ষা করে দেখতে TryParse()
পারা বিরক্তিকর । আমি ব্যবহার করতে চান ternary operator
কিনা তা চেক করতে string
হয় numerical
এবং তারপর শুধুমাত্র প্রথম তিন অভিব্যক্তি এটা পার্স বা দ্বিতীয় তিন এক্সপ্রেশনে ডিফল্ট মান প্রদান।
এটার মত:
var doubleValue = IsNumeric(numberAsString) ? double.Parse(numberAsString) : 0;
এটি এর চেয়ে অনেক বেশি পরিষ্কার:
var doubleValue = 0;
if (double.TryParse(numberAsString, out doubleValue)) {
//whatever you want to do with doubleValue
}
আমি extension methods
এই মামলার জন্য একটি দম্পতি করেছি :
public static bool IsParseableAs<TInput>(this string value) {
var type = typeof(TInput);
var tryParseMethod = type.GetMethod("TryParse", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder,
new[] { typeof(string), type.MakeByRefType() }, null);
if (tryParseMethod == null) return false;
var arguments = new[] { value, Activator.CreateInstance(type) };
return (bool) tryParseMethod.Invoke(null, arguments);
}
উদাহরণ:
"123".IsParseableAs<double>() ? double.Parse(sNumber) : 0;
কারণ IsParseableAs()
স্ট্রিংটি "সাংখ্যিক" কিনা তা পরীক্ষা করার পরিবর্তে স্ট্রিংটিকে উপযুক্ত প্রকার হিসাবে পার্স করার চেষ্টা করে তবে এটি নিরাপদ হওয়া উচিত। এবং আপনি এমনকি এটির মতো সংখ্যাবিহীন প্রকারের জন্যও ব্যবহার করতে পারেন TryParse()
যেমন একটি পদ্ধতি রয়েছে DateTime
।
পদ্ধতিটি প্রতিবিম্বটি ব্যবহার করে এবং আপনি TryParse()
পদ্ধতিটি দু'বার কল করে শেষ করেন যা অবশ্যই কার্যকর নয়, তবে সবকিছুকে পুরোপুরি অনুকূল করতে হবে না, কখনও কখনও সুবিধা কেবল আরও গুরুত্বপূর্ণ।
এই পদ্ধতিটি double
কোনও সংখ্যা ব্যতীত ধরা না পড়েই ডিফল্ট মান সহ একটি সংখ্যা বা অন্য কোনও ধরণের তালিকায় সহজেই সংখ্যার স্ট্রিংয়ের তালিকা পার্স করতে ব্যবহার করা যেতে পারে :
var sNumbers = new[] {"10", "20", "30"};
var dValues = sNumbers.Select(s => s.IsParseableAs<double>() ? double.Parse(s) : 0);
public static TOutput ParseAs<TOutput>(this string value, TOutput defaultValue) {
var type = typeof(TOutput);
var tryParseMethod = type.GetMethod("TryParse", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder,
new[] { typeof(string), type.MakeByRefType() }, null);
if (tryParseMethod == null) return defaultValue;
var arguments = new object[] { value, null };
return ((bool) tryParseMethod.Invoke(null, arguments)) ? (TOutput) arguments[1] : defaultValue;
}
এই এক্সটেনশন পদ্ধতিটি আপনাকে string
কোনও পদ্ধতি type
রয়েছে এমন একটিকে পার্স TryParse()
করতে দেয় এবং রূপান্তর ব্যর্থ হলে এটি আপনাকে ফিরে আসতে একটি ডিফল্ট মান নির্দিষ্ট করতে দেয়।
উপরের এক্সটেনশন পদ্ধতির সাথে টার্নারি অপারেটরটি ব্যবহার করার চেয়ে এটি আরও ভাল কারণ এটি কেবল একবার রূপান্তর করে। এটি এখনও প্রতিবিম্ব ব্যবহার করে যদিও ...
উদাহরণ:
"123".ParseAs<int>(10);
"abc".ParseAs<int>(25);
"123,78".ParseAs<double>(10);
"abc".ParseAs<double>(107.4);
"2014-10-28".ParseAs<DateTime>(DateTime.MinValue);
"monday".ParseAs<DateTime>(DateTime.MinValue);
আউটপুট:
123
25
123,78
107,4
28.10.2014 00:00:00
01.01.0001 00:00:00
var x = double.TryParse("2.2", new double()) ? double.Parse("2.2") : 0.0;
?
Argument 2 must be passed with the 'out' keyword
এবং যদি আপনি out
পাশাপাশি উল্লেখ করেন তবে new
পাবেন A ref or out argument must be an assignable variable
।
যদি আপনি জানতে চান যে স্ট্রিংটি একটি সংখ্যা কিনা আপনি সর্বদা এটির বিশ্লেষণ করার চেষ্টা করতে পারেন:
var numberString = "123";
int number;
int.TryParse(numberString , out number);
নোট করুন যে TryParse
কোনওটি প্রদান করে bool
, যা আপনার পার্সিং সফল হয়েছে কিনা তা পরীক্ষা করতে আপনি ব্যবহার করতে পারেন।
bool Double.TryParse(string s, out double result)
কুণাল নোয়েল উত্তর আপডেট
stringTest.All(char.IsDigit);
// This returns true if all characters of the string are digits.
তবে, এই ক্ষেত্রে আমাদের কাছে আছে যে খালি স্ট্রিংগুলি সেই পরীক্ষায় উত্তীর্ণ হবে, সুতরাং আপনি এটি করতে পারেন:
if (!string.IsNullOrEmpty(stringTest) && stringTest.All(char.IsDigit)){
// Do your logic here
}
.Net সঙ্গে সেরা নমনীয় সমাধান বিল্ট-ইন ফাংশন called- char.IsDigit
। এটি সীমাহীন দীর্ঘ সংখ্যার সাথে কাজ করে। প্রতিটি অক্ষর যদি একটি সংখ্যাসূচক হয় তবে এটি সত্য হবে। আমি এটি বহুবার ব্যবহার করেছি কোন সমস্যা এবং খুব সহজেই ক্লিনার সমাধান আমি খুঁজে পেয়েছি। আমি একটি উদাহরণ পদ্ধতি তৈরি করেছি I এটি ব্যবহারের জন্য প্রস্তুত। এছাড়াও আমি নাল এবং খালি ইনপুটটির জন্য বৈধতা যুক্ত করেছি। সুতরাং পদ্ধতিটি এখন সম্পূর্ণ বুলেটপ্রুফ
public static bool IsNumeric(string strNumber)
{
if (string.IsNullOrEmpty(strNumber))
{
return false;
}
else
{
int numberOfChar = strNumber.Count();
if (numberOfChar > 0)
{
bool r = strNumber.All(char.IsDigit);
return r;
}
else
{
return false;
}
}
}
স্ট্রিংটি সংখ্যাসূচক কিনা এবং স্ট্রিংটিতে কেবল 0-9 ডিজিট রয়েছে কিনা তা পরীক্ষা করে পরিষ্কার করার জন্য এই এক্সটেনশন পদ্ধতিগুলি ব্যবহার করুন
public static class ExtensionMethods
{
/// <summary>
/// Returns true if string could represent a valid number, including decimals and local culture symbols
/// </summary>
public static bool IsNumeric(this string s)
{
decimal d;
return decimal.TryParse(s, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.CurrentCulture, out d);
}
/// <summary>
/// Returns true only if string is wholy comprised of numerical digits
/// </summary>
public static bool IsNumbersOnly(this string s)
{
if (s == null || s == string.Empty)
return false;
foreach (char c in s)
{
if (c < '0' || c > '9') // Avoid using .IsDigit or .IsNumeric as they will return true for other characters
return false;
}
return true;
}
}
আপনার প্রকল্পে ভিজ্যুয়াল বেসিকের একটি রেফারেন্স এ টানুন এবং এর তথ্য ব্যবহার করুন belowIs সংখ্যাসূচক পদ্ধতি যেমন নীচে দেখানো হয়েছে এবং উপরের উত্তরটির বিপরীতে পূর্ণসংখ্যার পাশাপাশি পূর্ণসংখ্যার ক্যাপচার করতে সক্ষম হবেন যা কেবল ইনটস করে ches
// Using Microsoft.VisualBasic;
var txt = "ABCDEFG";
if (Information.IsNumeric(txt))
Console.WriteLine ("Numeric");
IsNumeric("12.3"); // true
IsNumeric("1"); // true
IsNumeric("abc"); // false
IsNumeric
স্ট্রিংয়ের একটি চরিত্র বিশ্লেষণ। মানক সংখ্যার প্রকারটি ব্যবহার করে এই সংখ্যাটি উপস্থাপন করার কোনও উপায় না থাকলেও, এর মতো একটি নম্বর এই 9999999999999999999999999999999999999999999999999999999999.99999999999
হিসাবে নিবন্ধভুক্ত করবে True
।
সমস্ত উত্তরগুলি দরকারী। তবে এমন একটি সন্ধানের সময় যেখানে সংখ্যার মানটি 12 ডিজিট বা তার চেয়ে বেশি (আমার ক্ষেত্রে), তারপরে ডিবাগ করার সময় আমি নিম্নলিখিত সমাধানটি দরকারী বলে মনে করি:
double tempInt = 0;
bool result = double.TryParse("Your_12_Digit_Or_more_StringValue", out tempInt);
তম ফলাফলের পরিবর্তনশীল আপনাকে সত্য বা মিথ্যা দেবে।
এখানে সি # পদ্ধতি। ইনট্রি ট্রাই পার্সে পদ্ধতি (স্ট্রিং, ইন্ট 32)
//To my knowledge I did this in a simple way
static void Main(string[] args)
{
string a, b;
int f1, f2, x, y;
Console.WriteLine("Enter two inputs");
a = Convert.ToString(Console.ReadLine());
b = Console.ReadLine();
f1 = find(a);
f2 = find(b);
if (f1 == 0 && f2 == 0)
{
x = Convert.ToInt32(a);
y = Convert.ToInt32(b);
Console.WriteLine("Two inputs r number \n so that addition of these text box is= " + (x + y).ToString());
}
else
Console.WriteLine("One or two inputs r string \n so that concatenation of these text box is = " + (a + b));
Console.ReadKey();
}
static int find(string s)
{
string s1 = "";
int f;
for (int i = 0; i < s.Length; i++)
for (int j = 0; j <= 9; j++)
{
string c = j.ToString();
if (c[0] == s[i])
{
s1 += c[0];
}
}
if (s == s1)
f = 0;
else
f = 1;
return f;
}