none
Função para verificar uma palavra em tabela (blacklist) RRS feed

  • Pergunta

  • Pessoal,

    Preciso criar uma função que vai verificar se um nickname que está sendo cadastrado tem alguma palavra proibida, exemplo:

    Tabela BlackList

    Campo id         Campo Palavra

    1                     Zueira

    2                     Besteira

    Se o nickname enviado pelo sistema para verificação tiver uma dessas palavras "contidas" nele retornarei 1, senão retornarei 0.

    nickname: azueiragrande => retornaria 1

    Tem alguma função do SQL ou alguém já desenvolveu algo parecido??

    No meu caso a necessidade é verificar se em um parâmetro enviado têm contidas palavras de BlackList.

    Obrigada!!


    Jéssica Campanholo


    segunda-feira, 28 de março de 2016 12:32

Respostas

  • Olá, obrigada pela resposta.

    Consegui a resolução desse item com a função abaixo que criei:

    CREATE FUNCTION fn_BlackList(@palabra nvarchar(50))
     RETURNS smallint
    BEGIN
     RETURN (SELECT CASE WHEN SUM(CHARINDEX(texto,@palabra)) > 0 THEN 1 ELSE 0 END from BlackList)
      
     END

    --  SELECT [dbo].[fn_BlackList]('aaazueirabbbb')


    Jéssica Campanholo

    segunda-feira, 28 de março de 2016 15:08

Todas as Respostas

  • A principio penso de você fazer o contrário, que com certeza funcionaria, mas provavelmente não seria a melhor maneira. Isso seria, você usar um "SELECT * FROM tabela" e pegar linha a linha e comparar com a "String" original.

    Dessa forma, por exemplo, você faria esse "SELECT" e colocaria ele em um "DataTable", e rodaria esse procedimento em C#:

    public static List<int> Verify(string nick, DataTable blacklist)
    {
        List<int> Ret = new List<int>();
        foreach (DataRow Row in DataTable.Rows)
        {
            if (nick.Contains((string)Row[1])) { Ret.Add((int)Row[0]); }
        }
        return Ret;
    }

    Entende? Porque o SQL tem um comando "LIKE", que seria uma alternativa, mas a palavra original pode conter a palavra listada, não o oposto, então o uso do "LIKE" teria que ser "expandido". Você teria antes que transformar a "String" de forma que ela possa ser comparada: algo como "azueiragrande" viraria "%a%z%u%e%i%r%a%g%r%a%n%d%e%" (com os caracteres de percentual após cada letra) e o "SELECT" ficaria assim:

    SELECT ID FROM tabela WHERE Palavra LIKE '%a%z%u%e%i%r%a%g%r%a%n%d%e%'

    O problema com essa opção é a grande possibilidade de falsos positivos no retorno ...

    • Sugerido como Resposta Roberto AB Filho segunda-feira, 28 de março de 2016 14:04
    • Marcado como Resposta Marcos SJ segunda-feira, 28 de março de 2016 14:29
    • Não Marcado como Resposta Jessica Campanholo segunda-feira, 28 de março de 2016 15:09
    segunda-feira, 28 de março de 2016 13:57
  • Olá, obrigada pela resposta.

    Consegui a resolução desse item com a função abaixo que criei:

    CREATE FUNCTION fn_BlackList(@palabra nvarchar(50))
     RETURNS smallint
    BEGIN
     RETURN (SELECT CASE WHEN SUM(CHARINDEX(texto,@palabra)) > 0 THEN 1 ELSE 0 END from BlackList)
      
     END

    --  SELECT [dbo].[fn_BlackList]('aaazueirabbbb')


    Jéssica Campanholo

    segunda-feira, 28 de março de 2016 15:08