2016-01-22 77 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;