2013-05-03 53 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

相關問題