我正在制作一个程序,该程序只接受像Hal456这样的格式的用户ID,第一个是大写的,接下来是两个小写的,最后是三个数字。
我试着一步一步地完成这个程序,但在第二个IF语句时失败了。
Sub Main()
Dim userid As String
Dim flag As Boolean
flag = False
Console.WriteLine("Input userID to check format")
userid = "Hal123"
Dim a, b, c, d, e, f As Integer
a = Asc("a")
b = Asc("z")
c = Asc("A")
d = Asc("Z")
e = Asc("0")
f = Asc("9")
If Len(userid) = 6 Then
If Asc(Left(userid, 1)) > c And Asc(Left(userid, 1)) < d Then
If Asc(Mid(userid, 2, 1)) > a And Asc(Mid(userid, 2, 1)) < b Then
If Asc(Mid(userid, 3, 1)) > a And Asc(Mid(userid, 3, 1)) < b Then
If Asc(Mid(userid, 4, 1)) > e And Asc(Mid(userid, 4, 1)) < f Then
If Asc(Mid(userid, 5, 1)) > e And Asc(Mid(userid, 5, 1)) < f Then
If Asc(Mid(userid, 6, 1)) > e And Asc(Mid(userid, 6, 1)) < f Then
flag = True
Console.WriteLine("Format of userID is correct")
End If
End If
End If
End If
End If
End If
End If
If flag = False Then Console.WriteLine("Format is not correct")
Console.ReadLine()
End Sub
我看到了代码的问题。这是一个简单的解决方案。只需将所有"<"更改为"<=",将所有">"更改为不带引号的">="即可。
原因:您的程序将不允许"a"one_answers"z"以及"0"one_answers"9"成为用户ID的一部分。将其更改为大于或等于可以解决此问题。
希望这能有所帮助!
使用正则表达式试试这个:
Sub Main()
Dim userid As String
Dim flag As Boolean
Console.WriteLine("Input userID to check format")
userid = "Hal123"
flag = CheckUserID(userid)
If flag = False Then Console.WriteLine("Format is not correct")
Console.ReadLine()
End Sub
Private Function CheckUserID(userId As String) As Boolean
Dim regex As Regex = New Regex("([A-Z]){1}([a-z]){2}([0-9]){3}")
Dim match As Match = regex.Match(userId)
Return match.Success
End Function
使用REGEXP解决这个问题怎么样?我认为这应该是直截了当的。
类似于:
string pattern = @"[A-Z][a-z]{2}d{3}";
Regex rx = new Regex(pattern);
string uid = "";
do
{
Console.WriteLine("Please insert userID:");
uid = Console.ReadLine();
bool check = rx.IsMatch(uid);
} while (!rx.IsMatch(uid));