检查输入字符 - Pascal

Check Input Character - Pascal

我正在尝试编写一段代码,用于验证包含大小写字母和数字的字母数字 ID 号。

由于它的大小固定,我在隔离每个部分时没有问题(即要分别检查的大写部分、小写部分和数字部分),但我在检查大写和小写字母时遇到问题。

我已经阅读了 IsUpperIsLower 函数,但我很难在我的程序中实现它。这是最有效的方法还是有更简单的方法?

我正在使用 Pascal(Free 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.

TCharacter.IsLetterOrDigit:

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;

您也可以通过检查每个字母所在的字符集来轻松做到这一点(借用 Martin Prikryl 的基本函数结构,但使用 Free Pascal 的 "exit" 语法):

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 以代替检查 LC_LETTERS 和 [=16= 中的 s[i] ].