2015-10-13 29 views
0

我想要限制用户只传递数字,字母, - 和单个空间。问题是,我不想遇到这样的情况,用户可以把一个以上的空间,在同一个地方象下面这样:在同一地点检查空间的发生

Something 45 Last Ter 

正如你看到的,我们有一个以上的空间已经被放置后的两个地方“某事“和”最后“之后。我怎样才能改变我的代码以确保这种情况不会发生?

'check whether Symbol contains only letters, digits or - symbol otherwise break             
For Each c As Char In txtNazwa.Text 
    If Not Char.IsLetterOrDigit(c) AndAlso c <> "-"c AndAlso c <> " " Then 
     MessageBox.Show("Only letters, digits, - and single space are available", "Ostrzeżenie", MessageBoxButtons.OK, MessageBoxIcon.Warning) 
     Exit Try 
    End If 
Next 
+3

,你可以使用'与string.replace(“‘’”)'和解决它,而不是打扰他们 – Plutonix

+3

格式吃它,而是用2位的第一个参数,1第二和任何多空格将被转换...'String.Replace([2 spaces],[1 space]“)' – Plutonix

回答

2

直接回答这个问题:

检查如果字符串包含连续的2个空格这样的:

If txtNazwa.Text.Contains(" ") Then 
    MessageBox.Show("The value must not contain two consecutive spaces") 
End If 

相反,如果你想解决这个问题的用户,可以这样做:

Dim str As String = txtNazwa.Text 

While str.Contains(" ") 
    str = str.Replace(" ", " ") 
End While 

txtNazwa.Text = str 
+0

好吧但如果他把3或4或更多的空间呢?我这样做,但然后我将不得不复制这个方法.. – Arie

+0

@StackUser,它也可以工作,因为3个空格包含2个空格 –

1

使用正则表达式,并保持自己的麻烦。

Dim Nazwa_Text = System.Text.RegularExpressions.Regex.Replace(txtNazwa.Text, "\s+", " ") 

接下来使用您的For-Loop,如您的帖子中所述。

3

我假设用户正在输入一个文本框。看看文本框更改事件。

private void currencyTextBox_TextChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     currencyTextBox.Text = Regex.Replace(currencyTextBox.Text, " {2 }", " ") 
    } 
    catch 
    { 
     // Do something if we get an error 
    } 
} 
+1

好主意检查为用户类型 –