2016-11-20 138 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长,然后检查"##??*"