簡體   English   中英

驗證字符串/字符數據中的循環/邏輯問題

[英]loop/logic issues in validating string/character data

我需要查看字符串末尾的字符是 zip 代碼還是 zip+4。 如果此字符串的末尾沒有 zip 或 zip+4,則拒絕此地址。 我不明白為什么當我到達破折號字符“-”(即 asci 45)時,我的 noZip 在這里變成了 TRUE。 我從 fnIsDash function 返回“是”,但此時我離開了循環。

與此問題相關——我想使用正則表達式來查看我的字符串是否為 zip 代碼,它將是“NNNNN-NNNN”或“NNNNN”,其中 N 是任何數字。 但是根據我的研究,我沒有看到功能強大的正則表達式在進行中。 真的嗎?

FUNCTION fnisNumeric RETURNS LOGICAL (INPUT cCharacter AS CHARACTER) FORWARD.
FUNCTION fnisDash RETURNS LOGICAL (INPUT cCharacter AS CHARACTER) FORWARD.

DEFINE VARIABLE location AS CHARACTER NO-UNDO.
DEFINE VARIABLE zipPlus4Temp AS CHARACTER NO-UNDO.
DEFINE VARIABLE noZip AS LOGICAL NO-UNDO.
DEFINE VARIABLE cThisChar AS CHARACTER NO-UNDO.
DEFINE VARIABLE cTemp AS CHARACTER NO-UNDO.
DEFINE VARIABLE iTemp AS INTEGER NO-UNDO.

location = "124 State Road Mechanicsburg PA 17050-3156".

zipPlus4Temp = SUBSTRING (location, length(location) - 9, 10).
MESSAGE "zipPlus4Temp " + zipPlus4Temp VIEW-AS ALERT-BOX.
noZip = FALSE.
                                                                           
DO iTemp = 1 TO LENGTH(zipPlus4Temp):
   IF noZip EQ TRUE THEN LEAVE.
       cThisChar = SUBSTRING(zipPlus4Temp,iTemp,1).
       MESSAGE STRING(iTemp) + " this char " + cThisChar VIEW-AS ALERT-BOX.
       IF iTemp GE 1 AND iTemp GE 5 THEN
           IF NOT(fnIsNumeric(cThisChar)) THEN noZip = TRUE.
       //noZip becomes true here
       IF iTemp EQ 6 THEN 
           IF NOT(fnIsDash(cThisChar)) THEN noZip = TRUE.
       IF iTemp GE 7 AND iTemp GE 10 THEN 
           IF NOT(fnIsNumeric(cThisChar)) THEN noZip = TRUE. 
END.

MESSAGE SUBSTITUTE("zipPlus4Temp &1 is &2",zipPlus4Temp, noZip).

FUNCTION fnIsNumeric RETURNS LOGICAL (i_cc as CHARACTER):
    RETURN ASC(i_cc) GE 48 AND ASC(i_cc) LE 57.
END FUNCTION.

FUNCTION fnIsDash RETURNS LOGICAL (i_cc as CHARACTER):
    MESSAGE SUBSTITUTE("The character being passed is &1",i_cc) VIEW-AS ALERT-BOX.
    MESSAGE "the ascii value of the character being passed is " + STRING(ASC(i_cc)) VIEW-AS ALERT-BOX.
    RETURN ASC(i_cc) EQ 45.
END FUNCTION.

您的 noZip 變量在破折號檢查之前變為 TRUE。 您的數字 1-5 邏輯有誤。 IF-THEN 語句表示大於或等於 1 且大於或等於 5。它應該小於或等於 5。將行更改為:

IF iTemp GE 1 AND iTemp LE 5 THEN

數字 7-10 檢查相同,但這不會影響 noZip 值。

IF iTemp GE 7 AND iTemp LE 10 THEN

不,Progress 不支持正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM