2013-05-03 98 views
0

我真的目前正在对C#中的学生项目,我要检查,如果字符串只包含下列字符:

AI 0 -9 $ #

原始字符串:

string rawData ="$A008B20130503C103804D00000000E1022F0080G0128H022I022#"; 

我的代码如下:

string regEXstring = @"^[A-I0-9$#]+$"; 
Regex regex = new Regex(regEXstring); 
if (regex.IsMatch(rawData)) 
    { 
     dataOK = true; 
    } 
    else 
     dataOK = false; 

我在做什么错?

+4

你能澄清一下你认为会出错吗?我刚刚测试过这些代码,并且一目了然似乎可行(假设'rawdata' /'rawData'只是一个错字,而且你已经在某处声明了dataOK]。 – Chris 2013-05-03 08:51:34

+1

这是匹配..你知道'rawdata'和'rawData'是不同的吗? – 2013-05-03 08:53:27

+2

您还可以用'dataOK = regexIsMatch(rawData);'(或rawdata,取其准确的数字)替换'if' – 2013-05-03 08:55:19

回答

1

修复您的rawdata/rawData错字,代码正常工作。 dataOK变量将变成true与您的示例数据和false如果其他字符添加到字符串。

从您的示例数据来看,可以提高验证,这样你也可以determinte说:

  • 字符串以$
  • 字符串开头#
  • 字符串结束包含实体由单个字符跟随有至少三​​个数字

对于的,使用模式等:

string regEXstring = @"^\$([A-I]\d{3,})+#$"; 
+0

谢谢你提供更好的RegEx字符串。 我刚刚意识到卡上的字符串(通过RS-232发送)以NEWLN CR开头。 这是什么造成的麻烦? rawdata/rawData在Stackoverflow上只是一个错字。 – 2013-05-03 09:23:46

+0

@EivindFrøystad:是的,额外的换行符会导致模式失败。您可以在模式的开头添加'[\ r \ n] *',以允许换行符在那里。 ' “^ [\ r \ n]的* \ $([A-I] \ d {3,...})+#$”'。或者,您可以使用'rawData = rawData.Replace(“\ r”,“”).Replace(“\ n”,“”);'在验证前删除字符串中的任何换行符。 – Guffa 2013-05-03 09:48:28

+0

感谢您提供非常有用的答案!我用rawData.Trim()修复了它; – 2013-05-03 09:55:51

相关问题