关于我,我总是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:"有些人在遇到问题时会想'我知道,我会使用正则表达式.'现在他们有两个问题.")
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参数,根据需要进行更改.