2016-11-20 497 views
1

如果接收到「ffff」,則立即解析爲true並顯示消息框。我正在閱讀的方式是「如果從索引處開始(在代碼中早些時候初始化爲0)並且距離爲1(意味着它僅評估該單個字母)的文本不是AZ或az,那麼顯示此消息框。否則,退出此if語句」這個if語句有什麼問題?

爲什麼是不是出了什麼實際發生的?

If (txtPartNum.Text.Substring(index, 1) IsNot "[A-Z]" OrElse txtPartNum.Text.Substring(index, 1) IsNot "[a-z]") Then 
       MessageBox.Show("Error: Part number must contain two numbers followed by two letters. first") 
       blnValid = False 
End If 

編輯:我想切換到這一點,我沒有得到任何這方面的運氣,要麼

If (txtPartNum.Text.Substring(index, 1) Like "[!A-Z]" OrElse txtPartNum.Text.Substring(index, 1) Like "[!a-z]") Then 
       MessageBox.Show("Error: Part number must contain two numbers followed by two letters. first") 
       blnValid = False 
End If 

編輯2:我做了一個字符串來保存txtPartNum.Text.Substring(指數,1),並驗證它正在接收文本框中的第一個字母。我也嘗試刪除「!」在角色模式中,這對它是否解決問題沒有影響 - 它每次都是正確的。

+0

因爲你在比較字符串;不匹配某種模式;使用MaskedTextBox來強制執行輸入規則可能是一個不錯的主意 – Sehnsucht

+1

IsNot'不會爲你進行模式測試,如果它符合你的要求。使用正則表達式或'Char.IsLetter(txtPartNum.Text(0))' – Plutonix

+1

您似乎已經將[IsNot](https://msdn.microsoft.com/en-us/library/t3bat82c.aspx)運算符與[Like](https://msdn.microsoft.com/en-us/library/swf8kaxw.aspx)運算符。 –

回答

3

當你有一個簡單的模式,其輸入必須符合,您可以使用正則表達式

Dim textToLookAt = txtPartNum.Text 
If Not (System.Text.RegularExpressions.Regex.IsMatch(textToLookAt, "^[0-9]{2}[A-Za-z]{2}")) Then 
    MessageBox.Show("Error: Part number must contain two numbers followed by two letters. first") 
    blnValid = False 
End If 

^表示該行的開始。 [0-9]表示範圍爲「0」到「9」的字符。 {2}意味着前一個項目的兩個 - 在這種情況下爲[0-9][A-Za-z]表示這些範圍內的字符。沒有什麼可以告訴正則表達式該行必須在那裏完成,因此允許兩個數字和兩個字母后面的任何字符。

1

不完全確定您正在檢查的規則。看起來您正試圖驗證零件號碼是否以兩個數字後跟兩個字符開頭。這裏是一個例子,但顯然要根據您希望執行的規則進行更改。

If txtPartNum.Text LIKE "##??" = False Then 
     MessageBox.Show("Error: Part number must contain two numbers followed by two letters.") 
     blnValid = False 
End If 

如果零件數量比4長,然後檢查"##??*"