문자열이 숫자인지 식별
다음과 같은 문자열이 있는 경우:
"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);
또는 번호가 필요 없는 경우 out 매개 변수를 폐기할 수 있습니다.
var isNumeric = int.TryParse("123", out _);
vars는 각각의 유형으로 대체될 수 있습니다!
, 하다, 하다, 하다, 하다.input
모두 숫자입니다.그게 더 나은지 모르겠어TryParse
하지만 잘 될 거야
Regex.IsMatch(input, @"^\d+$")
혼재되어 1은 합니다.^
+
★★★★★★★★★★★★★★★★★」$
.
Regex.IsMatch(input, @"\d")
편집: 실은 매우 긴 문자열이 TryParse를 오버플로 할 수 있기 때문에 TryParse보다 낫다고 생각합니다.
다음 항목도 사용할 수 있습니다.
using System.Linq;
stringTest.All(char.IsDigit);
은 반환될 이다.true
숫자(비알림)에 사용할 수 있습니다.float
및 )의 개요false
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
테스트 케이스 | 반환값 | 시험결과 |
---|---|---|
"1234" |
진실의 | ✅합격 |
"1" |
진실의 | ✅합격 |
"0" |
진실의 | ✅합격 |
"" |
진실의 | ⚠contractFail(알려진 에지 실패 |
"12.34" |
거짓의 | ✅합격 |
"+1234" |
거짓의 | ✅합격 |
"-13" |
거짓의 | ✅합격 |
"3E14" |
거짓의 | ✅합격 |
"0x10" |
거짓의 | ✅합격 |
주의: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
(출처 : aspalliance.com )
(출처 : aspalliance.com )
이것이 C#에서 가장 좋은 옵션일 것입니다.
문자열에 정수(정수)가 포함되어 있는지 여부를 확인하는 경우:
string someString;
// ...
int myInt;
bool isNumerical = int.TryParse(someString, out myInt);
TryParse 메서드는 문자열을 숫자(integer)로 변환하려고 하며 성공하면 true를 반환하고 대응하는 번호를 myInt에 배치합니다.그렇지 않으면 false가 반환됩니다.
「 」를 int.Parse(someString)
다른 응답에 표시된 대안은 작동하지만 예외 발생 비용이 매우 비싸기 때문에 훨씬 느립니다. TryParse(...)
버전 2에서 C#언어에 추가되어 그 전까지는 선택의 여지가 없었습니다..따서 、 그, 、Parse()
★★★★★★ 。
진수를 는, 진수의 10 진수가 있습니다..TryParse(...)
됩니다.위의 설명에서 int를 10진수로 대체하면 동일한 원칙이 적용됩니다.
많은 데이터 유형에 대해 내장된 TryParse 메서드를 사용하여 해당 문자열이 전달되는지 확인할 수 있습니다.
예.
decimal myDec;
var Result = decimal.TryParse("123", out myDec);
결과는 = True가 됩니다.
decimal myDec;
var Result = decimal.TryParse("abc", out myDec);
결과는 = False가 됩니다.
int를 사용하고 싶지 않은 경우.해석 또는 이중화해석, 다음과 같은 방법으로 자신의 것을 굴릴 수 있습니다.
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;
}
}
보다 넓은 범위의 번호(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 숫자 유형(표준 라이브러리에 정의되어 있지 않음).
오래된 스레드인 것은 알지만, 효율적이지 않거나 쉽게 재사용할 수 있도록 캡슐화되지 않은 답변은 없습니다.문자열이 비어 있거나 늘인 경우 false가 반환되는지 확인하고 싶었습니다.이 경우 TryParse는 true를 반환합니다(빈 문자열은 숫자로 해석할 때 오류가 발생하지 않습니다).문자열 확장 방법은 다음과 같습니다.
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);
또는 잠재적인 16진수 문자열을 테스트하려면 다음을 사용할 수 있습니다.
var mystring = "0xF67AB2";
var test = mystring.IsNumeric(style: NumberStyles.HexNumber)
옵션인 'culture' 매개 변수도 거의 동일한 방법으로 사용할 수 있습니다.
더블에 넣을 수 없을 정도로 큰 문자열은 변환할 수 없기 때문에 한정되어 있습니다만, 이것보다 큰 숫자로 작업하고 있는 경우는, 어쨌든 특별한 번호 처리 기능이 필요하게 될 것이라고 생각합니다.
Kunal Noel Answer 업데이트
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
}
TryParse를 사용하여 문자열을 정수로 구문 분석할 수 있는지 여부를 확인할 수 있습니다.
int i;
bool bNum = int.TryParse(str, out i);
부울은 작동 여부를 알려줍니다.
문자열이 숫자인지 여부를 확인하려면 언제든지 구문 분석을 시도할 수 있습니다.
var numberString = "123";
int number;
int.TryParse(numberString , out number);
:TryParse
를 반환하다bool
를 사용하여 해석에 성공했는지 여부를 확인할 수 있습니다.
이 답변은 그냥 다른 답변들 사이에서 사라지겠지만, 어쨌든, 갑니다.
나는 구글을 통해 이 질문을 하게 되었다. 왜냐하면 나는 이 질문의 유무를 확인하고 싶었기 때문이다.string
numeric
그래서 내가 그냥 쓸 수 있게double.Parse("123")
TryParse()
★★★★★★ 。
게 요? 그 이유는 그 사실을 신고해야 하는 게 짜증나기 때문입니다.out
합니다.TryParse()
해석에 실패했는지 아닌지를 알 수 없습니다.사용하고 싶다ternary operator
를 확인하다string
numerical
첫 번째 3진 표현으로 해석하거나 두 번째 3진 표현으로 기본값을 지정합니다.
다음과 같이 합니다.
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
다음과 같이 합니다.
확장 방식 1
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
.
으로 "Reflection(리플렉션)", "Reflection(리플렉션)", "Reflection(리플렉션)"을 합니다.TryParse()
물론 효율은 그다지 높지 않지만 모든 것을 완전히 최적화할 필요는 없습니다.때로는 편리성이 더 중요할 수도 있습니다.
하면 숫자 을 " " " 으로 할 수도 .double
또는 예외를 검출하지 않고 기본값을 사용하는 다른 유형:
var sNumbers = new[] {"10", "20", "30"};
var dValues = sNumbers.Select(s => s.IsParseableAs<double>() ? double.Parse(s) : 0);
확장 방식 2
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
가가 a that TryParse()
또한 변환이 실패할 경우 반환할 기본값을 지정할 수 있습니다.
이는 변환이 한 번만 이루어지므로 위의 확장 메서드에서 3진 연산자를 사용하는 것보다 더 좋습니다.그래도 반사를 쓰긴 하는데...
예:
"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
문자열이 숫자인지 확인하고 싶은 경우(숫자라면 1인 것을 알 수 있기 때문에 문자열이라고 생각합니다).
- 정규식을 사용하지 않고
- 가능한 한 마이크로소프트의 코드를 사용하여
다음을 수행할 수도 있습니다.
public static bool IsNumber(this string aNumber)
{
BigInteger temp_big_int;
var is_number = BigInteger.TryParse(aNumber, out temp_big_int);
return is_number;
}
이렇게 하면 통상적인 문제가 해결됩니다.
- 처음에 마이너스(-) 또는 플러스(+)
- BigIntegers는
소수점을 가진 숫자를구문분석하지않습니다.(따라서:BigInteger.Parse("3.3")
예외가 발생합니다.TryParse
거짓을 말하다 - 웃기지 않는 농담은 없다
- 이 보다 큰 .
Double.TryParse
때 합니다.System.Numerics
가지다 using System.Numerics;
bool Double.TryParse(string s, out double result)
.net이라는 의 . 내장 함수를한 솔루션 이름:char.IsDigit
긴 합니다. 무제한 긴 숫자로 작동합니다.사실대로 말하다문제없이 여러 번 사용했고, 지금까지 찾은 솔루션보다 훨씬 깔끔했습니다.나는 모범적인 방법을 만들었다.바로 사용할 수 있습니다.또한 null 입력과 빈 입력에 대한 검증을 추가했습니다. 그 이 되었다.
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;
}
}
}
아래 regex 정의를 사용해 보십시오.
new Regex(@"^\d{4}").IsMatch("6") // false
new Regex(@"^\d{4}").IsMatch("68ab") // false
new Regex(@"^\d{4}").IsMatch("1111abcdefg")
new Regex(@"^\d+").IsMatch("6") // true (any length but at least one digit)
c# 7에서는 출력 변수를 인라인화할 수 있습니다.
if(int.TryParse(str, out int v))
{
}
문자열이 숫자인지, 문자열에 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;
}
}
public static bool IsNumeric(this string input)
{
int n;
if (!string.IsNullOrEmpty(input)) //.Replace('.',null).Replace(',',null)
{
foreach (var i in input)
{
if (!int.TryParse(i.ToString(), out n))
{
return false;
}
}
return true;
}
return false;
}
Regex rx = new Regex(@"^([1-9]\d*(\.)\d*|0?(\.)\d*[1-9]\d*|[1-9]\d*)$");
string text = "12.0";
var result = rx.IsMatch(text);
Console.WriteLine(result);
문자열이 uint, ulong 또는 숫자 1(닷) 및 숫자만 포함하는지 확인하려면 입력 예
123 => True
123.1 => True
0.123 => True
.123 => True
0.2 => True
3452.434.43=> False
2342f43.34 => False
svasad.324 => False
3215.afa => False
도움이 되었으면 좋겠다
string myString = "abc";
double num;
bool isNumber = double.TryParse(myString , out num);
if isNumber
{
//string is number
}
else
{
//string is not a number
}
프로젝트에서 Visual Basic에 대한 참조를 가져와 해당 정보를 사용합니다.IsNumeric 방식은 아래와 같이 int만 잡는 위와 달리 플로트 및 정수를 캡처할 수 있습니다.
// Using Microsoft.VisualBasic;
var txt = "ABCDEFG";
if (Information.IsNumeric(txt))
Console.WriteLine ("Numeric");
IsNumeric("12.3"); // true
IsNumeric("1"); // true
IsNumeric("abc"); // false
모든 답변이 유용합니다.단, 수치값이 12자리 이상인 솔루션을 검색하던 중(내 경우), 디버깅 중에 다음 솔루션이 유용하다는 것을 알게 되었습니다.
double tempInt = 0;
bool result = double.TryParse("Your_12_Digit_Or_more_StringValue", out tempInt);
th result 변수는 true 또는 false를 제공합니다.
다음은 C# 메서드입니다.Int.TryParse(String, Int32)
bool is_number(string str, char delimiter = '.')
{
if(str.Length==0) //Empty
{
return false;
}
bool is_delimetered = false;
foreach (char c in str)
{
if ((c < '0' || c > '9') && (c != delimiter)) //ASCII table check. Not a digit && not delimeter
{
return false;
}
if (c == delimiter)
{
if (is_delimetered) //more than 1 delimiter
{
return false;
}
else //first time delimiter
{
is_delimetered = true;
}
}
}
return true;
}
언급URL : https://stackoverflow.com/questions/894263/identify-if-a-string-is-a-number
'programing' 카테고리의 다른 글
한 파일에서 다른 파일에 없는 행을 빠르게 찾을 수 있는 방법? (0) | 2023.04.10 |
---|---|
로컬 스토리지와 쿠키 (0) | 2023.04.10 |
Powershell v3 Invoke-WebRequest HTTPS 오류 (0) | 2023.04.10 |
현재 회선 번호는 어떻게 알 수 있나요? (0) | 2023.04.10 |
SQL에서 테이블의 마지막 레코드를 선택하려면 어떻게 해야 합니다. (0) | 2023.04.10 |