我试图编写一段代码,允许我验证包含大写和小写字母以及数字的字母数字ID号。
由于它的大小固定,我没有问题隔离每个部分(即大写部分,小写部分和数字部分需要单独检查),但我在检查大写和小写字母时遇到问题。 / p>
我已阅读IsUpper
和IsLower
函数,但我在我的程序中难以实现它。这是最有效的方式还是更容易的路线?
我使用Pascal(免费Pascal IDE)并且要验证的示例输入将是Abc123
。
谢谢!
编辑:
Program CheckChar;
VAR
UserID, LCase, UCase, Num : String;
readkey : char;
L : Integer;
CONST
Upper = ['A'..'Z'];
Lower = ['a'..'z'];
Int = ['0'..'9'];
Begin
Write('Enter UserID ');Readln(UserID);
Ucase := Copy(UserID,1,1);
LCase := Copy(UserID,2,1);
Num := Copy(UserID,3,2);
L := Length(UserID);
While L = 6 Do
Begin
IF not (Ucase in Upper) or (Lcase in Lower) or (Num in Int) then
Begin
Writeln('Invalid Input');
End;
Else
Writeln('Valid Input');
Else
Writeln('Invalid Length);
End;
readln(readkey);
End.
答案 0 :(得分:0)
function IsIsLetterOrDigitString(S: string): Boolean;
begin
for Index := 1 to Length(S) do
begin
if not TCharacter.IsLetterOrDigit(S[Index]) then
begin
Result := False;
Exit;
end;
end;
Result := True;
end;
答案 1 :(得分:0)
您也可以通过检查每个字母所包含的字符集来轻松完成此操作(借用Martin Prikryl的基本功能结构,但使用Free Pascal的“退出”语法):
function IsAlphaNumericString(s: string): boolean;
var
i: integer;
begin
for i:= 1 to length(s) do
if not (s[i] in ['a'..'z','A'..'Z','0'..'9']) then
exit(false);
exit(true);
end;
如果您愿意,还可以为各种范围定义常量:
function IsAlphaNumericString(s: string): boolean;
const
LC_LETTERS = ['a'..'z'];
UC_LETTERS = ['A'..'Z'];
NUMERALS = ['0'..'9'];
var
i: integer;
begin
for i:= 1 to length(s) do
if not ((s[i] in LC_LETTERS) or (s[i] in UC_LETTERS) or (s[i] in NUMERALS)) then
exit(false);
{ Or equivalently:
if not (s[i] in LC_LETTERS)) and
not (si[i] in UC_LETTERS) and
not (s[i] in NUMERALS) then
exit(false);
}
exit(true);
end;
您也可以只有一个字母范围,例如LETTERS = ['a'..'z']
并检查ToLower(s[i]) in LETTERS
,而无需检查s[i]
和LC_LETTERS
中的UC_LETTERS
。