PL/SQL verbeteringen in Oracel 10g - Regular Expressions |
Oracle 10g ondertseund regular expressions in SQL en PL/SQL met de volgende functies:
- REGEXP_INSTR - Vergelijkbaar aan INSTR behalve dat het als search string, een regular expression boven een literal verkiest.
- REGEXP_LIKE - Vergelijkbaar aan LIKE behalve dat het een regular expression gebruikt als de search string.
- REGEXP_REPLACE - Vergelijkbaar aan REPLACE behalve dat het een regular expression gebruikt als de search string.
- REGEXP_SUBSTR - Geeft de string terug die overeenkomt met de regular expression. Niet echt gelijk aan SUBSTR.
De volgende voorbeelden laten zien hoe deze functies gebruikt kunnen worden met een eenvoudige regular expression ('[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}') voor standaard creditcard validatie: SET SERVEROUTPUT ON DECLARE l_text VARCHAR2(100) := 'MIjn credit card details zijn: 1234 1234 1234 1234'; l_regular_expr VARCHAR2(50) := '[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}';
l_credit_card_1 VARCHAR2(50) := '1234 1234 1234 1234'; l_credit_card_2 VARCHAR2(50) := '123c 1234 1234 1234'; BEGIN -- REGEXP_INSTR IF REGEXP_INSTR(l_text, l_regular_expr) > 0 THEN DBMS_OUTPUT.put_line('REGEXP_INSTR: Je input bevat credit card details, dit is een security risico!'); END IF;
-- REGEXP_LIKE IF REGEXP_LIKE(l_credit_card_1, l_regular_expr) THEN DBMS_OUTPUT.put_line('REGEXP_LIKE: Goede Credit Card: ' || l_credit_card_1); END IF; IF NOT REGEXP_LIKE(l_credit_card_2, l_regular_expr) THEN DBMS_OUTPUT.put_line('REGEXP_LIKE: Slechte Credit Card : ' || l_credit_card_2); END IF;
-- REGEXP_REPLACE DBMS_OUTPUT.put_line('REGEXP_REPLACE: Before: ' || l_text); DBMS_OUTPUT.put_line('REGEXP_REPLACE: After : ' || REGEXP_REPLACE(l_text, l_regular_expr, '**** **** **** ****'));
-- REGEXP_SUBSTR DBMS_OUTPUT.put_line('REGEXP_SUBSTR: Matching String : ' || REGEXP_SUBSTR(l_text, l_regular_expr)); END; / Het bouwen van regular expressions die aan jouw behoeften voldoen kunnen iets verwarrend werken en is ook niet het uitgangspunt van dit artikel. |
|
|