अगर मेरे पास ये तार हैं:
"abc"
=false
"123"
=true
"ab2"
=false
क्या कोई कमांड, जैसे IsNumeric()
या कुछ और है, जो पहचान सकता है कि क्या एक स्ट्रिंग एक वैध संख्या है?
अगर मेरे पास ये तार हैं:
"abc"
= false
"123"
= true
"ab2"
= false
क्या कोई कमांड, जैसे IsNumeric()
या कुछ और है, जो पहचान सकता है कि क्या एक स्ट्रिंग एक वैध संख्या है?
जवाबों:
int n;
bool isNumeric = int.TryParse("123", out n);
C # 7 के अनुसार अपडेट करें :
var isNumeric = int.TryParse("123", out int n);
या यदि आपको नंबर की आवश्यकता नहीं है तो आप आउट पैरामीटर को छोड़ सकते हैं
var isNumeric = int.TryParse("123", out _);
वर रों उनके संबंधित प्रकार के द्वारा बदला जा सकता है!
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")
संपादित करें: वास्तव में मुझे लगता है कि यह TryParse से बेहतर है क्योंकि एक बहुत लंबी स्ट्रिंग संभावित रूप से TryParse को ओवरफ्लो कर सकती है।
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 )
यह शायद C # में सबसे अच्छा विकल्प है।
यदि आप जानना चाहते हैं कि क्या स्ट्रिंग में पूर्ण संख्या (पूर्णांक) है:
string someString;
// ...
int myInt;
bool isNumerical = int.TryParse(someString, out myInt);
TryParse पद्धति स्ट्रिंग को एक संख्या (पूर्णांक) में बदलने का प्रयास करेगी और यदि यह सफल होता है तो यह सही लौटेगी और संबंधित संख्या को myInt में रखेगी। यदि ऐसा नहीं हो सकता है, तो यह गलत है।
int.Parse(someString)
अन्य प्रतिक्रियाओं में दिखाए गए विकल्प का उपयोग करके समाधान काम करता है, लेकिन यह बहुत धीमा है क्योंकि अपवाद फेंकना बहुत महंगा है। TryParse(...)
संस्करण 2 में C # भाषा में जोड़ा गया था, और तब तक आपके पास कोई विकल्प नहीं था। अब आप करते हैं: इसलिए आपको Parse()
विकल्प से बचना चाहिए ।
यदि आप दशमलव संख्याओं को स्वीकार करना चाहते हैं, तो दशमलव वर्ग में एक .TryParse(...)
विधि भी है । उपरोक्त चर्चा में int के साथ int बदलें, और वही सिद्धांत लागू होते हैं।
आप हमेशा कई डेटाटिप्स के लिए TryParse विधियों में निर्मित का उपयोग करके देख सकते हैं कि क्या प्रश्न में स्ट्रिंग पास हो जाएगी।
उदाहरण।
decimal myDec;
var Result = decimal.TryParse("123", out myDec);
परिणाम तब = सत्य होगा
decimal myDec;
var Result = decimal.TryParse("abc", out myDec);
परिणाम तब = गलत होगा
यदि आप int.Parse या double.Parse का उपयोग नहीं करना चाहते हैं, तो आप कुछ इस तरह से अपना रोल कर सकते हैं:
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;
}
}
यदि आप संख्याओं के व्यापक स्पेक्ट्रम को पकड़ना चाहते हैं, तो la PHP का is_numeric , आप निम्नलिखित का उपयोग कर सकते हैं:
// 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"
एक पूर्ण मान्य मान्य संख्यात्मक मान है, लेकिन यह एक .NET संख्यात्मक प्रकार (मानक पुस्तकालय में परिभाषित नहीं है, जो है) में फिट नहीं होगा।
मुझे पता है कि यह एक पुराना धागा है, लेकिन किसी भी उत्तर ने वास्तव में मेरे लिए ऐसा नहीं किया है - या तो अक्षम है, या आसान दुरुपयोग के लिए समझाया नहीं है। मैं यह भी सुनिश्चित करना चाहता था कि यदि स्ट्रिंग खाली थी या अशक्त थी, तो वह झूठी लौट आएगी। TryParse इस मामले में सही है (एक खाली स्ट्रिंग संख्या के रूप में पार्स करते समय त्रुटि का कारण नहीं बनता है)। तो, यहाँ मेरा स्ट्रिंग विस्तार विधि है:
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)
वैकल्पिक 'संस्कृति' पैरामीटर का उपयोग उसी तरह से किया जा सकता है।
यह उन स्ट्रिंग्स को परिवर्तित करने में सक्षम नहीं है जो एक डबल में समाहित होने के लिए बहुत बड़े हैं, लेकिन यह एक सीमित आवश्यकता है और मुझे लगता है कि यदि आप इससे बड़े नंबरों के साथ काम कर रहे हैं, तो आपको संभवतः अतिरिक्त विशेष नंबर हैंडलिंग की आवश्यकता होगी वैसे भी काम करता है।
यदि आप जांचना चाहते हैं कि क्या एक स्ट्रिंग एक संख्या है (मैं मान रहा हूँ कि यह एक स्ट्रिंग है यदि यह एक संख्या है, तो, आप जानते हैं कि यह एक है)।
आप भी कर सकते हैं:
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 अंतर्निहित फ़ंक्शन के साथ सबसे अच्छा लचीला समाधान- char.IsDigit
। यह असीमित लंबी संख्या के साथ काम करता है। यह केवल तभी सही होगा जब प्रत्येक वर्ण एक संख्यात्मक संख्या हो। मैंने इसे कई बार बिना किसी समस्या के उपयोग किया और बहुत आसानी से क्लीनर समाधान जो मैंने कभी पाया। मैंने एक उदाहरण विधि बनाई। मैं उपयोग करने के लिए तैयार हूं। इसके अलावा मैंने शून्य और खाली इनपुट के लिए सत्यापन जोड़ा। तो विधि अब पूरी तरह से बुलेटप्रूफ है
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;
}
}
अपनी परियोजना में विज़ुअल बेसिक के संदर्भ में खींचें और इसकी Information.IsNumeric विधि का उपयोग करें जैसा कि नीचे दिखाया गया है और ऊपर दिए गए उत्तर के विपरीत फ्लोटर्स के साथ-साथ पूर्णांक को कैप्चर करने में सक्षम है, जो केवल ints को पकड़ता है।
// 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);
गु परिणाम चर आपको सही या गलत देगा।
यहाँ सी # विधि है। Int.TryParse विधि (स्ट्रिंग, इंट 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;
}