检查字符串是否是十六进制数的有效重复

apo*_*ene 6 c# regex hex

关于我,我总是noob regex.我的目标是检查一个字符串是否是十六进制数的有效重复.目前我的实现(我发现它实际上效率不高)是一个包含所有HEX数字(0,1,... 9,A,B..F)的List,并检查我的字符串是否包含未包含在给定List中的字符.我打赌这可以使用正则表达式轻松完成,但我不知道如何实现它.

 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;
       }
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 14

我原以为尝试将字符串转换为整数类型并处理任何异常是最快的.使用这样的代码:

int num = Int32.Parse(s, System.Globalization.NumberStyles.HexNumber);
Run Code Online (Sandbox Code Playgroud)

生成的代码可能比正则表达式更容易理解,如果您需要解析的值(或者您可以使用Int32.TryParse其他答案中已充分记录的内容),则特别有用.

(我最喜欢的一句话是Jamie Zawinski:"有些人在遇到问题时会想'我知道,我会使用正则表达式.'现在他们有两个问题.")

  • +1.甚至是`TryParse`版本 - `Int32.TryParse(输入,System.Globalization.NumberStyles.HexNumber,null,out myInt);` (11认同)

Tig*_*ran 10

简单地检查

检查字符串是否是十六进制数的有效重复

您可以使用以下方法:

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

      //IT'S A VALID HEX
}
Run Code Online (Sandbox Code Playgroud)

注意 System.Globalization.CultureInfo.InvariantCulture参数,根据需要进行更改.