检查字符串是否是hex数的有效重复

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

  private bool ISValidHEX(string s) { List ToCheck = new List(); 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; } 

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

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

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

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

简单检查一下

检查字符串是否是hex数的有效重复

你可以使用如下方法:

 int res = 0; if(int.TryParse(val, System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out res)) { //IT'S A VALID HEX } 

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

我建议使用Int32.TryParse 。 有一个允许hex数转换的重载

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

这比简单的Int32.Parse更好,因为如果你有一个无效的hex或转换溢出Int32.MaxValue你没有得到exception,但你可以简单地测试布尔返回值。

警告,字符串不能以“0x”或“&H”作为前缀

^[0-9a-fA-F]+$将匹配字符串,这些字符串是数字和有效的hex字母但是这与前面可能的0x不匹配。 我相信如果需要你可以添加。

我试过谷歌搜索。 我找到了很多解决方案。 这是两个:

使用正则表达式validationhex颜色代码

正则表达式hex数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; }