也許你可以嘗試像(選擇R83樣式)
OK = X MATCH 「2N1X2N1X2N」 和X [3,1] = X [6,1]和INDEX( 「:/ - 」 ,X [3,1],1)> 0
其中變量X是一些輸入字符串,如:12-34-56
如果驗證通過,應將變量OK設置爲1,否則爲0,表示任何無效格式。
這似乎將所有您需要的驗證合併到一個聲明中。我假定非數字字符必須相同。如果不是這樣,檢查可以改變成類似於:
OK = X MATCH「2N1X2N1X2N」AND INDEX(「:/ - 」,X [3,1],1)> 0 AND INDEX(「 :/ - 「,X [6,1],1)> 0
好吧,我想周圍的角色的要求是不明顯的。儘管如此,它並沒有讓它變得更難。你只需要'解析'字符串尋找輸入字符串中的第一個(我認爲)這樣的模式(如果有的話)。這可以通過幾行代碼完成。這裏是一個(而未經測試)R83風格測試程序:
PROMPT ":"
LOOP
LOOP
CRT 'Enter test string':
INPUT S
WHILE S # "" AND LEN(S) < 8 DO
CRT "Invalid input! Hit RETURN to exit, or enter a string with >= 8 chars!"
REPEAT
UNTIL S = "" DO
*
* Look for 1st occurrence of pattern in string..
CARDNUM = ""
FOR I = 1 TO LEN(S)-7 WHILE CARDNUM = ""
IF S[I,8] MATCH "2N1X2N1X2N" THEN
IF INDEX(":/-",S[I+2,1],1) > 0 AND INDEX(":/-",S[I+5,1],1) > 0 THEN
CARDNUM = S[I,8] ;* Found it!
END ELSE I = I + 8
END
NEXT I
*
CRT CARDNUM
REPEAT
這裏有只有7或8行,實際上尋找在源/測試串卡號模式。
嘿嘿謝謝回答這可能是工作......但這裏的字符串,對此我比較沒有目標字符串,字符串是這樣的「評論評論sdgsghsdgsjk」信用卡號碼'eghsgkjnhgks「。字符串就像評論,並在這些評論之間,我必須找到信用卡號碼,所以它不可能找到確切的位置,所以我們不能使用索引 –
heyy可以工作thanx代碼.....我一定會使用邏輯在我的代碼...... –
如果這解決了你的問題,也許你可能會考慮'接受'這個答案? – stope19