2016-01-22 74 views
0

我想写一个代码块,这将允许我验证包含大小写字母以及数字的字母数字身份证号码。检查输入字符 - 帕斯卡尔

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

我已经阅读了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. 
+0

你能证明你试过了吗? – lurker

回答

0

您还可以通过只检查什么字符集每个字母是(从马丁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; 

你可以如果你想LSO定义各个范围的常数:

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_LETTERSUC_LETTERSs[i]检查。

+0

好吧...我尝试了类似的东西,但是我为每组要检查的字符创建了一个类型定义。它没有工作。我会试着用这条路线运气,看看它是否有效。谢谢! –

+0

@AbdullahZameek你的问题没有显示你尝试过什么,也没有问为什么这种特定的方法失败。在这种情况下,您不想尝试为范围定义不同的数据类型,然后查看输入是否与数据类型保持一致。你不知道输入字符的范围是什么,所以你需要检查它与已知的恒定范围。我用这种例子更新了我的答案。如果您发现我的答案可以接受,请点击“接受”复选标记来表示如此。 – lurker

+0

这是我的错误,我的程序几乎与您的解决方案相同,除了我已将字母和数字分配为Const定义的类型定义intead。对不起,我对StackExchange系统很陌生,仍然试图去适应它:)非常感谢! –

0

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;