J
Johan Vergeer
Guest
I would like to use a regular expression in OpenEdge to replace parts of a string.
In this case we want to replace SQL expressions with a symbol (now we use ?).
So what I have so far is this:
USING Progress.Lang.*.
USING System.Text.RegularExpressions.*.
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS TOOLS.externals.TextSanitizer:
CONSTRUCTOR PUBLIC TextSanitizer ( ):
SUPER ().
END CONSTRUCTOR.
METHOD PUBLIC CHARACTER SanitizeSql( INPUT pInputText AS CHARACTER ):
DEFINE VARIABLE RESULT AS CHARACTER NO-UNDO.
DEFINE VARIABLE regexp AS Regex NO-UNDO.
regexp = NEW Regex("^((INSERT)\s+(INTO).*((VALUES)|(SELECT))|(SELECT).*(FROM)|(UPDATE).*(SET)|(DELETE)\s+(FROM)|((CREATE)|(DROP)|(TRUNCATE)|(ALTER)|(MODIFY))\s+((INDEX)|(TABLE)|(DATABASE)|(COLUMN)|(VIEW)))$").
RESULT = regexp:Replace(pInputText, "?").
DELETE OBJECT regexp.
RETURN RESULT.
END METHOD.
END CLASS.
And I wrote a procedure to run some tests:
BLOCK-LEVEL ON ERROR UNDO, THROW.
USING TOOLS.externals.TextSanitizer.
DEFINE VARIABLE textSanitizer AS TextSanitizer NO-UNDO.
textSanitizer = NEW TextSanitizer().
MESSAGE textSanitizer:SanitizeSql("SELECT * FROM") VIEW-AS ALERT-BOX.
RETURN.
Continue reading...
In this case we want to replace SQL expressions with a symbol (now we use ?).
So what I have so far is this:
USING Progress.Lang.*.
USING System.Text.RegularExpressions.*.
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS TOOLS.externals.TextSanitizer:
CONSTRUCTOR PUBLIC TextSanitizer ( ):
SUPER ().
END CONSTRUCTOR.
METHOD PUBLIC CHARACTER SanitizeSql( INPUT pInputText AS CHARACTER ):
DEFINE VARIABLE RESULT AS CHARACTER NO-UNDO.
DEFINE VARIABLE regexp AS Regex NO-UNDO.
regexp = NEW Regex("^((INSERT)\s+(INTO).*((VALUES)|(SELECT))|(SELECT).*(FROM)|(UPDATE).*(SET)|(DELETE)\s+(FROM)|((CREATE)|(DROP)|(TRUNCATE)|(ALTER)|(MODIFY))\s+((INDEX)|(TABLE)|(DATABASE)|(COLUMN)|(VIEW)))$").
RESULT = regexp:Replace(pInputText, "?").
DELETE OBJECT regexp.
RETURN RESULT.
END METHOD.
END CLASS.
And I wrote a procedure to run some tests:
BLOCK-LEVEL ON ERROR UNDO, THROW.
USING TOOLS.externals.TextSanitizer.
DEFINE VARIABLE textSanitizer AS TextSanitizer NO-UNDO.
textSanitizer = NEW TextSanitizer().
MESSAGE textSanitizer:SanitizeSql("SELECT * FROM") VIEW-AS ALERT-BOX.
RETURN.
Continue reading...