måndag 20 april 2009

Validera e-post som SQL funktion i mySQL

Ett av de många coola grejer som mySQL har är faktiskt att man kan använda RegExp i dess funktioner. Så istället för att skriva koden på din sida kan du fixa funktioner som validera e-poster direkt i mySQL. Så här kan vi validera e-post adresser

Koden:

DELIMITER $

DROP FUNCTION IF EXISTS `myDatabas`.`validateEmail` $$

CREATE FUNCTION `validateEmail`(t_email varchar(64)) RETURNS tinyint(1)

BEGIN

CASE
WHEN NOT (SELECT t_email REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$')
THEN
-- om e-posten är fel
RETURN FALSE;
ELSE
-- pm e-posten är coolt
RETURN TRUE;
END CASE;

END $$

DELIMITER ;


Om e-post adressen är okej, får vi 1 annars får vi bara 0 förstås.

Jag använder just denna funktion för en nyhetsbrevs utskick som jag har gjort med .NET och så här ser min SQL-sats ut (förkortat för enkelhetensskull).

SELECT DISTINCT(email) FROM people WHERE validateEmail(email)=1