也许你可以尝试像(选择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