Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonction de vérification des e-mails SQL à l'aide de Regex

La réponse courte est que non, cela ne peut pas être fait. La syntaxe de LIKE n'est pas la même chose que (et bien moins puissante que) les expressions régulières. Voir aussi Expressions régulières SQL Server dans T-SQL

Mais vous pouvez faire le saut vers .Net et y faire la correspondance. Vous pouvez instancier un VBScript.RegExp dans T-SQL en utilisant sp_OACreate et utilisez-le.

CREATE FUNCTION dbo.isValidEmailFormat
(
    @Email varchar(100)
)
RETURNS bit
AS
BEGIN
    DECLARE @pattern varchar(4000)
    SET @pattern = '[a-zA-Z0-9_\-][email protected]([a-zA-Z0-9_\-]+\.)+(com|org|edu|nz|au)'
    DECLARE @Result bit

    DECLARE @objRegexExp INT
    EXEC sp_OACreate 'VBScript.RegExp', @objRegexExp OUT

    EXEC sp_OASetProperty @objRegexExp, 'Pattern', @pattern
    EXEC sp_OASetProperty @objRegexExp, 'IgnoreCase', 1
    EXEC sp_OASetProperty @objRegexExp, 'MultiLine', 0
    EXEC sp_OASetProperty @objRegexExp, 'Global', false
    EXEC sp_OASetProperty @objRegexExp, 'CultureInvariant', true

    EXEC sp_OAMethod @objRegexExp, 'Test', @Result OUT, @Email

    EXEC sp_OADestroy @objRegexExp

    RETURN @Result
END

Jetez un coup d'œil à Erreur de vérification d'e-mail Regex - en utilisant JavaScript pour voir si vous voulez être un peu moins restrictif sur les caractères autorisés.