我正在制作一个只接受像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
答案 0 :(得分:1)
使用正则表达式尝试:
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
答案 1 :(得分:1)
我看到了代码的问题。这是一个简单的修复。只需更改所有“&lt;”到“&lt; =”和所有“&gt;”到“&gt; =”没有引号。
原因: 您的程序不允许“a”和“z”以及“0”和“9”成为用户标识的一部分。 将其更改为大于或等于解决此问题。
希望这有帮助!
答案 2 :(得分:0)
如何使用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));