6

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 を返します。

4

2 に答える 2

8

簡単に言えば、いいえ、それはできません。LIKEの構文は、正規表現と同じではありません (また、それほど強力ではありません)。T-SQL での SQL Server 正規表現も参照してください。

しかし、.Net にホップして、そこでマッチングを行うことができます。sp_OACreateVBScript.RegExpを使用して内部 T-SQL をインスタンス化し、それを使用できます。

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 email validation error - using JavaScriptを見て、許可されている文字の制限を少し緩和したいかどうかを確認してください。

于 2013-03-20T12:54:43.430 に答える