입력 문자열에 숫자 값이 포함되어 있는지 (또는 반대로 숫자가 아님)를 테스트하는 가장 효율적인 방법은 무엇입니까? 나는 Double.Parse
또는 정규식을 사용할 수 있다고 생각 하지만 (아래 참조) 자바 스크립트 NaN()
또는 IsNumeric()
(그 VB 였는지 기억할 수 없습니까?) 와 같이 이것을 수행하는 방법이 있는지 궁금합니다 .
public static bool IsNumeric(this string value)
{
return Regex.IsMatch(value, "^\\d+$");
}
답변
정규식 오버 헤드가 없습니다.
double myNum = 0;
String testVar = "Not A Number";
if (Double.TryParse(testVar, out myNum)) {
// it is a number
} else {
// it is not a number
}
덧붙여서 GUID를 제외한 모든 표준 데이터 유형은 TryParse를 지원합니다.
업데이트
secretwep는 “2345”값이 위의 테스트를 숫자로 통과 할 것임을 나타냅니다. 그러나 문자열 내의 모든 문자가 숫자인지 확인해야하는 경우 다른 접근 방식을 취해야합니다.
예 1 :
public Boolean IsNumber(String s) {
Boolean value = true;
foreach(Char c in s.ToCharArray()) {
value = value && Char.IsDigit(c);
}
return value;
}
또는 조금 더 멋지고 싶다면
public Boolean IsNumber(String value) {
return value.All(Char.IsDigit);
}
업데이트 2 (@stackonfire에서 null 또는 빈 문자열 처리)
public Boolean IsNumber(String s) {
Boolean value = true;
if (s == String.Empty || s == null) {
value=false;
} else {
foreach(Char c in s.ToCharArray()) {
value = value && Char.IsDigit(c);
}
} return value;
}
답변
나는 이것과 같은 것을 선호한다. 그것은 당신이 무엇 NumberStyle
을 테스트 할지 결정할 수있게 해준다 .
public static Boolean IsNumeric(String input, NumberStyles numberStyle) {
Double temp;
Boolean result = Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp);
return result;
}
답변
이전 정답뿐만 아니라 아마 “숫자가 아님”의 일반적인 사용에 비수 (NaN) 인 것을 지적 가치가 없는 숫자 값으로 평가 될 수없는 문자열에 해당. NaN은 일반적으로 결과가 정의되지 않은 “불가능”계산의 결과를 나타내는 데 사용되는 숫자 값으로 이해됩니다. 이 점에서 Javascript 사용이 약간 오해의 소지가 있다고 말하고 싶습니다. C #에서 NaN은 단일 및 이중 숫자 형식의 속성으로 정의되며 0으로 0으로 다이빙 한 결과를 명시 적으로 참조하는 데 사용됩니다. 다른 언어에서는이를 사용하여 다른 “불가능”값을 나타냅니다.
답변
나는 이것이 확장과 람다 예제를 통해 여러 가지 방법으로 대답되었지만 가장 간단한 솔루션을 위해 두 가지를 조합 한 것으로 알고 있습니다.
public static bool IsNumeric(this String s)
{
return s.All(Char.IsDigit);
}
또는 Visual Studio 2015 (C # 6.0 이상)를 사용하는 경우
public static bool IsNumeric(this String s) => s.All(Char.IsDigit);
한 줄에 멋진 C # 6. 물론 이것은 숫자 만 테스트하기 때문에 제한적입니다.
사용하려면 문자열을 가지고 다음과 같이 메소드를 호출하십시오.
bool IsaNumber = "123456".IsNumeric();
답변
예, IsNumeric은 VB입니다. 일반적으로 사람들은 약간 어색하지만 TryParse () 메서드를 사용합니다. 제안했듯이 언제든지 직접 작성할 수 있습니다.
int i;
if (int.TryParse(string, out i))
{
}
답변
나는 확장 방법을 좋아하지만 가능하면 예외를 던지는 것을 좋아하지 않습니다. 여기에서 2 개의 답변 중 가장 좋은 확장 방법을 선택했습니다.
/// <summary>
/// Extension method that works out if a string is numeric or not
/// </summary>
/// <param name="str">string that may be a number</param>
/// <returns>true if numeric, false if not</returns>
public static bool IsNumeric(this String str)
{
double myNum = 0;
if (Double.TryParse(str, out myNum))
{
return true;
}
return false;
}
답변
C #에서 Visual Basic 함수를 계속 사용할 수 있습니다. 당신이해야 할 유일한 일은 아래 표시된 내 지침을 따르는 것입니다.
- 프로젝트를 마우스 오른쪽 단추로 클릭하고 “참조 추가”를 선택하여 Visual Basic 라이브러리 에 대한 참조를 추가하십시오.
-
그런 다음 아래와 같이 클래스로 가져옵니다 .
Microsoft.VisualBasic 사용;
-
다음 으로 아래와 같이 원하는 곳에서 사용하십시오 .
if (!Information.IsNumeric(softwareVersion)) { throw new DataException(string.Format("[{0}] is an invalid App Version! Only numeric values are supported at this time.", softwareVersion)); }
희망, 이것은 도움과 행운을 빕니다!