2016-01-22 3 views
0

Цель состоит в том, чтобы написать код только в VB, который проверит идентификатор пользователя и посмотрит, находится ли он в правильном формате. Первое письмо должно быть капиталом, следующие 3 должны быть строчными, а следующие три должны быть числами. Моя программа выводит «Формат не прав», несмотря ни на что. Даже если я напечатаю правильный формат:Программа не дает желаемого решения

Sub Main() 

    Dim userID As String 
    Dim a, b, c, d, e, f, g As Integer 

    Console.WriteLine("Input User ID") 
    userID = Console.ReadLine 

    'Take Hall123 as a example of a correct format 

    a = Asc(Left(userID, 1)) 
    'First capital letter 

    b = Asc(Mid(userID, 2, 1)) 
    'First lower case 

    c = Asc(Mid(userID, 3, 1)) 
    'Second lower case 

    d = Asc(Mid(userID, 4, 1)) 
    'Third lower case 

    e = Asc(Mid(userID, 5, 1)) 
    'd contains the first number 

    f = Asc(Mid(userID, 6, 1)) 
    'e contains the second number 

    g = Asc(Mid(userID, 7, 1)) 
    'f contains the third number 

    'just checking 
    Console.WriteLine(a) 
    Console.WriteLine(b) 
    Console.WriteLine(c) 
    Console.WriteLine(d) 
    Console.WriteLine(e) 
    Console.WriteLine(f) 

    If Len(userID) = 7 Then 
     If a >= 65 And a <= 90 Then 
      If b >= 97 And b <= 122 And c >= 97 And c <= 122 And d >= 97 And d <= 122 Then 
       If e <= 57 And 48 >= e And f <= 57 And 48 >= f And g <= 57 And g >= 48 Then 
        Console.WriteLine("Format is correct") 
       Else 
        Console.WriteLine("Format is not correct") 
       End If 
      Else 
       Console.WriteLine("Format is not correct") 
      End If 

     Else 
      Console.WriteLine("Format is not correct") 

     End If 
    Else 
     Console.WriteLine("Format is not correct") 
    End If 

    Console.ReadKey() 

End Sub 

Я использую функцию функции Mid правильно? Я только изучил это вчера ....

+0

Вы проверили окно отладки, чтобы убедиться, что a, b, c, d, e, f и g являются тем, чем они должны быть? – TMH8885

+0

Я не очень хорош в регулярных выражениях, но это похоже на хороший случай для регулярного выражения. Есть ли причина, по которой вы не используете регулярные выражения? Документация найдена здесь (https://msdn.microsoft.com/en-us/library/hs600312 (v = vs.110) .aspx) –

ответ

0

Mid - это отсрочка от дней до .Net, в наши дни лучше использовать SubString. Вам не нужно использовать любой метод для доступа к одиночным символам в строке. Строки можно рассматривать как массивы Char, поэтому вы можете получить доступ (например) к третьему символу как userID(2).

На самом деле нет смысла конвертировать символы в их эквиваленты ASCII, а затем проверять эти числа. Framework предоставляет методы проверки символов, чтобы увидеть, если они являются буквы, цифры, верхний или нижний корпус и т.д.

Вы можете использовать следующую функцию для проверки действительного идентификатором пользователя

Function CheckUserId(userID As String) As Boolean 
    If userID.Length <> 7 Then Return False 
    If Not Char.IsUpper(userID(0)) Then Return False 

    For i As Integer = 1 To 3 
     If Not Char.IsLower(userID(i)) Then Return False 
    Next 

    For i As Integer = 4 To 6 
     If Not Char.IsDigit(userID(i)) Then Return False 
    Next 
    Return True 
End Function 

Вы можете может ли выполните следующие действия:

Sub Main() 
    Console.WriteLine("Input User ID") 
    Dim userID as String = Console.ReadLine 

    If CheckUserId(userID) Then 
     Console.WriteLine("Format is correct") 
    Else 
     Console.WriteLine("Format is not correct") 
    End If 
End Sub 
Смежные вопросы