Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Área de Tecnologías de la Información y las Comunicaciones Aplicadas Universidad de Murcia
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
ATICA arrow Consultoria arrow DBconnector arrow PLSQL - Expresiones regulares
10.02.2012
 
 
PLSQL - Expresiones regulares Imprimir E-mail

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 )
 
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Volver al incio del documento Volver al inicio del documento
Área de Tecnologías de la Información y las Comunicaciones Aplicadas