检查输入字符 - Pascal
Check Input Character - Pascal
我正在尝试编写一段代码,用于验证包含大小写字母和数字的字母数字 ID 号。
由于它的大小固定,我在隔离每个部分时没有问题(即要分别检查的大写部分、小写部分和数字部分),但我在检查大写和小写字母时遇到问题。
我已经阅读了 IsUpper
和 IsLower
函数,但我很难在我的程序中实现它。这是最有效的方法还是有更简单的方法?
我正在使用 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.
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]
].
我正在尝试编写一段代码,用于验证包含大小写字母和数字的字母数字 ID 号。
由于它的大小固定,我在隔离每个部分时没有问题(即要分别检查的大写部分、小写部分和数字部分),但我在检查大写和小写字母时遇到问题。
我已经阅读了 IsUpper
和 IsLower
函数,但我很难在我的程序中实现它。这是最有效的方法还是有更简单的方法?
我正在使用 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.
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]
].