• Hi,

    you can use the regular expression with a user function like this:

    --select dbo.fnTestStringWithRegularExpression('pippo123', 4, 'T', 'T')

    ALTER         function [dbo].[fnTestStringWithRegularExpression]

     (

      @stringaDaControllare varchar(4096),      -- stringa da controllare

      @tipoStringa smallint,                  -- 1 = email

                                        -- 2 = numero di telefono italiano

                                        -- 3 = numero di telefono US

                                        -- 4 = stringa di lettere e numeri di almeno 8 caratteri

      @ricercaGlobale char(1),                -- T = cerca tutte le occorrenze

                                        -- F = cerca solo la prima occorrenza

      @ignoreCaseSensitive char(1)             -- T = ricerca ignorando case sensitive

                                        -- F = ricerca senza ignorare case sensitive

    &nbsp

    returns char(1)                         -- T = stringa da controllare ok

                                        -- F = stringa da controllare non corretta

    as

     begin

      -- espressioni di controllo in funzione del tipo di stringa da verificare

      declare @espressioneDiControllo varchar(1048)

      set @espressioneDiControllo = ''

      if (@tipoStringa = 1)

       begin

        -- email

        -- non accetta abc_@abc.it

        -- set @espressioneDiControllo = '^([a-zA-Z0-9_\-])+(\.([a-zA-Z0-9_\-])+)*@((\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\]))|((([a-zA-Z0-9])+(([\-])+([a-zA-Z0-9])+)*\.)+([a-zA-Z])+(([\-])+([a-zA-Z0-9])+)*))$'    --'^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$'

        -- ==============================================================================================================================

        set @espressioneDiControllo = '^([a-zA-Z0-9_\-])+(\.([a-zA-Z0-9_\-])+)*@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$'

       end

      if (@tipoStringa = 2)

       begin

        -- numero di telefono italiano

        set @espressioneDiControllo = '^([0-9]*\-?\ ?\/?[0-9]*)$'

       end

      if (@tipoStringa = 3)

       begin

        -- numero di telefono US

        set @espressioneDiControllo = '^(??<1>[(])?(?<AreaCode>[2-9]\d{2})(?(1)[)])(?(1)(?<2>[ ])|(??<3>[-])|(?<4>[ ])))?)?(?<Prefix>[1-9]\d{2})(?(AreaCode)(??(1)(?(2)[- ]|[-]?))|(?(3)[-])|(?(4)[- ]))|[- ]?)(?<Suffix>\d{4})$'

       end

      if (@tipoStringa = 4)

       begin

        -- stringa di lettere e numeri di almmeno 8 caratteri

        set @espressioneDiControllo = '(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,20})$'

       end

      if (@espressioneDiControllo <> '')

       begin

        -- esegue il controllo

        declare @hr integer

        declare @objRegExp integer

        declare @results bit

        declare @output char(1)

        

        -- creazione oggetto com per le regular expression

        exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp output

      

        if (@hr <> 0)

         begin

          set @results = 0

      

          goto USCITA

         end

         

        -- imposta le proprietà dell'oggetto com

        -- pattern rispetto cui testare

        exec @hr = sp_OAsetProperty @objRegExp, 'Pattern', @espressioneDiControllo

      

        if (@hr <> 0)

         begin

          set @results = 0

      

          goto USCITA

         end

      

        -- verifica globale o si ferma alla prima occorrenza

        if (@ricercaGlobale = 'T')

         begin

          exec @hr = sp_OAsetProperty @objRegExp, 'Global', True

         end

        else

         begin

          exec @hr = sp_OAsetProperty @objRegExp, 'Global', False

         end

      

        if (@hr <> 0)

         begin

          set @results = 0

      

          goto USCITA

         end

      

        -- ignora le lettere maiuscole

        if (@ignoreCaseSensitive = 'T')

         begin

          exec @hr = sp_OAsetProperty @objRegExp, 'IgnoreCase', True

         end

        else

         begin

          exec @hr = sp_OAsetProperty @objRegExp, 'IgnoreCase', False

         end

      

        if (@hr <> 0)

         begin

          set @results = 0

      

          goto USCITA

         end

      

        -- esegue il controllo della stringa chiamando il metodo Test

        exec @hr = sp_OAMethod @objRegExp, 'Test', @results output, @stringaDaControllare

      

        if (@hr <> 0)

         begin

          set @results = 0

      

          goto USCITA

         end

      

        -- distrugge l'oggetto com

        exec @hr = sp_OADestroy @objRegExp

      

        if (@hr <> 0)

         begin

          set @results = 0

      

          goto USCITA

         end

       end

      else

       begin

        -- tipologia non prevista

        set @results = 0

        goto USCITA

       end

    USCITA:

      if (@results = 1)

       begin

        set @output = 'T'

       end

      else

       begin

        set @output = 'F'

       end

      return @output

     end