我正在尝试在SQL Server 2005中创建一个函数,以检查电子邮件是否为带有正则表达式的有效格式。
这是我到目前为止的内容:
CREATE FUNCTION isValidEmailFormat ( @Email varchar(100) ) RETURNS bit AS BEGIN DECLARE @Result bit SET @Result = (SELECT CASE WHEN @Email LIKE '%[a-zA-Z0-9_\-]+@([a-zA-Z0-9_\-]+\.)+ (com|org|edu|nz|au])%' THEN 1 ELSE 0 END AS Valid) RETURN @Result END
我的正则表达式做错什么了吗?还是我需要做更多的工作才能将varchar与正则表达式进行比较?
-编辑-
现在,即使电子邮件格式本身正确,我输入的任何字符串都将返回0。
简短的答案是不,这是无法完成的。LIKE的语法与正则表达式不同(并且功能不如正则表达式)。
但是您可以跳到.Net并在那里进行匹配。您可以VBScript.RegExp使用sp_OACreate实例化内部T-SQL并使用它。
VBScript.RegExp
CREATE FUNCTION dbo.isValidEmailFormat ( @Email varchar(100) ) RETURNS bit AS BEGIN DECLARE @pattern varchar(4000) SET @pattern = '[a-zA-Z0-9_\-]+@([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
快看一下Regex电子邮件验证错误-使用JavaScript来查看您是否希望对允许使用哪些字符的限制有所减少。