Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 验证字符串_Vb.net - Fatal编程技术网

Vb.net 验证字符串

Vb.net 验证字符串,vb.net,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(Numbe

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

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
模块1
副标题()
作为字符串的数字
将字符变暗为字符串
TelNumber=Console.ReadLine()
对于Number=0到TelNumber.Length-1
字符=电话号码。子字符串(号码)
如果整数.TryParse(字符,0)为0,则
Console.WriteLine(“它不能包含字母”)
退出
如果结束
下一个
Console.ReadLine()
端接头
端模块

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

TelNumber。Substring(Number)
不仅仅是字符串的第个字符。 它返回的字符串开头去掉了
Number
字符

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


提示:简单字符串验证是的一项任务。 使用正则表达式,也可以很容易地将tel.number格式扩展为
+4915771828000
12-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

我手头没有编译器,但我可以告诉你我认为这应该是什么样子。首先让我们看看

结果 类型:System.Int32

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

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

那么我们来看看

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

1-800-FLOWERS
这样的数字呢?至于TryParse,请参见:Google“vb.net验证电话号码”。点击率很高。嗨@Todd432,我们的答案对你有帮助吗?