验证字符串

时间:2014-11-29 14:32:52

标签: vb.net

我正在尝试编写一个用户输入电话号码的程序,如果它包含一个字母,则会显示一条消息。

Module Module1

Sub Main()
    Dim TelNumber As String
    Dim Character As String
    TelNumber = Console.ReadLine()

    For Number = 0 To TelNumber.Length - 1
        Character = TelNumber.Substring(Number)
        If Integer.TryParse(Character, 0) <> 0 Then
            Console.WriteLine("It cannot contain a letter")
            Exit For
        End If
    Next

    Console.ReadLine()
End Sub

结束模块

然而,使用此代码即使它只能在字符串包含少于11个字符的情况下才能正常工作,之后即使它不包含任何字母,它仍会显示该消息。我该如何解决?另外我不明白Integer.TryParse函数的第二个参数代表什么?

2 个答案:

答案 0 :(得分:1)

TelNumber.Substring(Number) 只是字符串的Number字符。 它返回从开头剥离Number个字符的字符串。

因此,在循环的第一步中,TelNumber.Substring(0)返回整个字符串。 然后,Integer.TryParse()失败,整数溢出为长字符串。


提示:简单字符串验证是regular expressions的任务。 使用正则表达式,将tel.number格式扩展为+491577182800012-34-56也很容易。

Imports System.Text.RegularExpressions

Module Module1

  Sub Main()
    Dim telNumber As String = Console.ReadLine()
    Dim telValidationRegex As Regex = New Regex("^\d+$")

    If NOT telValidationRegex.Match(telNumber).Success Then
      Console.WriteLine("Wrong telephone number format")
    End If

    Console.ReadLine()
  End Sub

End Module

答案 1 :(得分:0)

我没有编译器方便,但我可以告诉你我认为这应该是什么样子。首先让我们看看Int32.TryParse's documentation

  

结果       键入:System.Int32

     

当此方法返回时,如果转换成功,则包含等效于s中包含的数字的32位有符号整数值;如果转换失败,则包含零。如果s参数为null或String.Empty,格式不正确,或者表示小于MinValue或大于MaxValue的数字,则转换失败。此参数未初始化传递。

因此,第二个参数应该是一个整数变量,其中包含尝试解析字符串的结果。

然后,让我们看一下substring

  

的startIndex       键入:System.Int32       此实例中子字符串的从零开始的字符位置。

所以你所做的不是查看每个字符并尝试将其转换为整数。它正在查看整数,并尝试将其转换为整数。然后整数,除了第一个字符,并尝试将其转换为数字。等等。

我怀疑你会发现Int32只能存储大约10位数的数字(2 ^ 32,或4294967296)

你想要做的就是看每个角色,就像这样。

Module Module1
//Warning, did not try to compile
Sub Main()
    Dim TelNumber As String
    Dim Character As String
    TelNumber = Console.ReadLine()

    For Number = 0 To TelNumber.Length - 1
        Character = TelNumbert(Number)
        Dim OutputNumber as Integer
        If Not Integer.TryParse(Character, OutputNumber) Then
            Console.WriteLine("It cannot contain a letter")
            Exit For
        End If
    Next

    Console.ReadLine()
End Sub

End Module