2014-09-19 2 views
2

regex에 관한 총 멍청입니다. 제 목표는 문자열이 16 진수의 올바른 재현인지 확인하는 것입니다. 현재 나의 구현 (정말 비효율적이라고 생각하는)은 16 진수 (0,1, ..., 9, A, B..F)가있는 목록을 가지고 있으며, 주어진 문자열에없는 문자열을 내 문자열에 포함하고 있는지 확인한다. . 정규 표현식을 사용하여이 작업을 쉽게 수행 할 수 있다고 생각하지만 구현 방법은 없습니다.문자열의 유효 숫자가 16 진수인지 확인하십시오.

private bool ISValidHEX(string s) 
     { 
      List<string> ToCheck = new List<string>(); 
      for (int i = 0; i < 10; i++) 
      { 
       ToCheck.Add(i.ToString()); 
      } 
      ToCheck.Add("A"); 
      ToCheck.Add("B"); 
      ToCheck.Add("C"); 
      ToCheck.Add("D"); 
      ToCheck.Add("E"); 
      ToCheck.Add("F"); 
      for (int i = 0; i < s.Length; i++) 
      { 
       if(!ToCheck.Contains(s.Substring(i,1))) 
       { 
        return false; 
       } 
      } 
      return true; 
     } 

답변

9

필자는 문자열을 정수형으로 변환하고 예외를 처리하려고 시도하는 것이 가장 빠르다고 생각했을 것입니다. 다음과 같은 코드를 사용

int num = Int32.Parse(s, System.Globalization.NumberStyles.HexNumber); 

결과 코드는 정규 표현식보다 따를 가능성이 쉽게 당신이 (다른 사람이 적절하게 다른 답변에 설명되어 Int32.TryParse를 사용할 수 있습니다) 구문 분석 된 값을 필요로하는 경우에 특히 유용합니다.

(나의 마음에 드는 따옴표 중 하나는 제이미 자윈 스키입니다 : "어떤 사람들은, 문제에 직면 할 때, 생각 이제 그들은 두 가지 문제를 가지고 '내가 아는, 내가 정규 표현식을 사용합니다.". ")

+5

+1. 또는'TryParse' 버전 -'Int32.TryParse (input, System.Globalization.NumberStyles.HexNumber, null, out myInt); ' – petelids

0

Google 검색을 시도했습니다. 나는 많은 해결책을 발견했다. 번호와 유효 진수 문자있는 문자열과 일치합니다

Validate Hex Color Code with Regular Expression

Regular Expression Hexadecimal Number Validation

//use System.Text.RegularExpressions before using this function 
public bool vldRegex(string strInput) 
{ 
//create Regular Expression Match pattern object 
Regex myRegex = new Regex("^[a-fA-F0-9]+$"); 
//boolean variable to hold the status 
bool isValid = false; 
if (string.IsNullOrEmpty(strInput)) 
{ 
    isValid = false; 
} 
else 
{ 
    isValid = myRegex.IsMatch(strInput); 
} 
//return the results 
return isValid; 
} 
+3

링크가 큰 경우에만 답변을하지 않은 연결로 시작 할 수 없습니다. 관련 섹션을 인용하거나 사용 예제를 제공하십시오. – crashmstr

2

^[0-9a-fA-F]+$하지만이 전면에서 가능 0X 일치하지 않습니다 여기에 두 가지입니다. 필요한 경우 추가 할 수 있다고 확신합니다.

9

int res = 0; 
if(int.TryParse(val, 
     System.Globalization.NumberStyles.HexNumber, 
     System.Globalization.CultureInfo.InvariantCulture, out res)) { 

     //IT'S A VALID HEX 
} 
: 문자열이 HEX 번호의 유효 represantion이

당신이 같은 방법을 사용할 수있는 경우 단순히

확인을 확인하려면

System.Globalization.CultureInfo.InvariantCulture에주의를 기울여서 필요에 따라 변경하십시오.

+0

@Bathsheba : 전혀 아닙니다. 시도 해봐. – Tigran

+0

확인.upvote을 가져라! – Bathsheba

4

Int32.TryParse을 사용하는 것이 좋습니다. 16 진수 숫자 변환에게 잘못된 진수 또는 변환을 가지고있는 경우에 Int32.MaxValue를 오버 플로우 때문에

int v; 
string test = "FF"; 
if(Int32.TryParse(test, NumberStyles.HexNumber, CultureInfo.CurrentCulture, out v)) 
    Console.WriteLine("Is HEX:" + v.ToString()); 

이 간단한에서 Int32.Parse보다 낫다 그렇지 허용 과부하가있다 예외를 얻지 만 단순히 부울 반환 값을 테스트 할 수 있습니다.

경고는, 문자열은 "0X"또는 "& H"

관련 문제