|
PLSQL - Expresiones regulares |
|
|
|
Oracle 10g soporta expresiones regulares en el código SQL y PL/SQL, mediante las siguientes funciones:
-
REGEXP_INSTR - Similar a INSTR excepto que usa una expresión regular en lugar de un literal como cadena de búsqueda.
-
REGEXP_LIKE - Similar a LIKE excepto que usa una expresión regular como cadena de búsqueda.
-
REGEXP_REPLACE - Similar a REPLACE excepto que usa una expresión regular como cadena de búsqueda.
-
REGEXP_SUBSTR - Devuelve la cadena que cumple la expresión regular. NO se parece a SUBSTR.
Los siguientes ejemplos muestran como se usan estas funciones con una expresión regular simple para validar un número de tarjeta de crédito ('[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}'):
SET SERVEROUTPUT ON
DECLARE
l_text VARCHAR2(100) := 'My credit card details are: 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: Your input contains credit card details, this is a security risk!');
END IF;
-- REGEXP_LIKE
IF REGEXP_LIKE(l_credit_card_1, l_regular_expr) THEN
DBMS_OUTPUT.put_line('REGEXP_LIKE: Good 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: Bad 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;
/
Algunos ejemplos de expresiones regulares:
| Cualquier letra en minuscula |
[a-z] |
| Entero |
^(?:\+|-)?\d+$ |
|
Correo electrónico
|
/[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/
|
|
URL
|
^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$
|
|
Fecha
|
^\d{1,2}\/\d{1,2}\/\d{2,4}$
(Por ejemplo 01/01/2007)
|
| Hora |
^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$
(Por ejemplo 10:45:23) |
|
Número tarjeta de crédito
|
^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$
|
|
Número teléfono
|
^[0-9]{2,3}-? ?[0-9]{6,7}$
|
|
Código postal
|
^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$
|
|
Certificado Identificación Fiscal
|
^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$
|
Fuentes:
|
|
Última modificación ( 14.12.2009 )
|