Função MySQL REGEXP_LIKE()

Resumo : neste tutorial, você aprenderá como usar a REGEXP_LIKE()função MySQL para verificar se uma string corresponde a uma expressão regular.

Introdução à função MySQL REGEXP_LIKE

A REGEXP_LIKE()função retorna 1 se uma string corresponder a uma expressão regular ou 0 caso contrário.

Aqui está a sintaxe da REGEXP_LIKE()função:

REGEX_LIKE(string, pattern, match_type)Linguagem de código:  JavaScript  ( javascript )

Nesta sintaxe:

  • string: esta é a string de entrada que você deseja verificar se corresponde a um padrão.
  • pattern: esta é a expressão regular que você deseja corresponder.
  • match_typeé uma string que inclui uma ou mais opções que especificam como a função executará a correspondência. Por exemplo, ca correspondência diferencia maiúsculas de minúsculas, enquanto ia correspondência não diferencia maiúsculas de minúsculas.

Se stringou patternfor NULL, a REGEXP_LIKE()função retornará NULL.

Exemplos de funções MySQL REGEXP_LIKE()

Vejamos alguns exemplos de uso da REGEXP_LIKE()função.

1) Exemplos simples de funções REGEXP_LIKE()

O exemplo a seguir usa a REGEXP_LIKE()função para verificar se a string MySQL 8.0corresponde à expressão regular "\\d+\\.\\d+":

SELECT REGEXP_LIKE("MySQL 8.0","\\d+\\.\\d+");Linguagem de código:  JavaScript  ( javascript )

Saída:

+----------------------------------------+
| REGEXP_LIKE("MySQL 8.0","\\d+\\.\\d+") |
+----------------------------------------+
|                                      1 |
+----------------------------------------+
1 row in set (0.01 sec)Linguagem de código:  JavaScript  ( javascript )

Neste exemplo, o padrão "\\d+\\.\\d+"corresponde a um ou mais dígitos, seguido por um caractere (.) e seguido por um ou mais dígitos.

Como a string de entrada possui a substring 8.0que corresponde ao padrão, a REGEXP_LIKE()função retorna 1.

O exemplo a seguir usa a REGEXP_LIKE()função e retorna 0porque a string de entrada não corresponde à expressão regular:

SELECT REGEXP_LIKE("MySQL 8","\\d+\\.\\d+");Linguagem de código:  JavaScript  ( javascript )

Saída:

+--------------------------------------+
| REGEXP_LIKE("MySQL 8","\\d+\\.\\d+") |
+--------------------------------------+
|                                    0 |
+--------------------------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

2) Usando a função REGEXP_LIKE() com o exemplo de dados da tabela

Usaremos a products tabela do banco de dados de exemplo :

O exemplo a seguir usa a REGEXP_LIKE()função para obter os nomes dos produtos que começam com 4 dígitos "^\\d{4}":

SELECT 
  productName 
FROM 
  products 
WHERE 
  REGEXP_LIKE(productName, "^\\d{4}");Linguagem de código:  JavaScript  ( javascript )

Saída:

+---------------------------------------------+
| productName                                 |
+---------------------------------------------+
| 1969 Harley Davidson Ultimate Chopper       |
| 1952 Alpine Renault 1300                    |
| 1996 Moto Guzzi 1100i                       |
| 2003 Harley-Davidson Eagle Drag Bike        |
| 1972 Alfa Romeo GTA                         |
...Linguagem de código:  JavaScript  ( javascript )

Neste exemplo, usamos a REGEXP_LIKE()função na WHEREcláusula. Se o nome do produto corresponder à expressão regular, ele retornará 1 e a consulta incluirá o produto no conjunto de resultados.

3) Usando a função REGEXP_LIKE para validar exemplo de dados

Suponha que você tenha uma tabela chamada contactscom três colunas: id, namee email:

CREATE TABLE contacts(
  id INT AUTO_INCREMENT, 
  name VARCHAR(255) NOT NULL, 
  email VARCHAR(300) NOT NULL, 
  PRIMARY KEY(id)
);Linguagem de código:  JavaScript  ( javascript )

Antes de inserir ou atualizar um valor na emailcoluna, você pode verificar se o formato do email é válido.

Para fazer isso você pode usar o REGEXP_LIKEcom uma CHECKrestrição . A CHECKrestrição executará a REGEXP_LIKE()função sempre que você inserir um valor na coluna de email ou atualizar um valor da coluna de email.

A instrução a seguir adiciona uma CHECKrestrição à emailcoluna da contactstabela:

ALTER TABLE 
  contacts 
ADD 
  CONSTRAINT email_validation CHECK (
     REGEXP_LIKE(email, "^\\S+@\\S+\\.\\S+$") = 1
  );Linguagem de código:  JavaScript  ( javascript )

Observe que, por questões de brevidade, usamos uma expressão regular simples para validar e-mails na maioria dos casos. Para uma versão abrangente, você pode usar o regex seguinte regex que corresponde aos endereços de e-mail com base no padrão RFC2822:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/gLinguagem de código:  JavaScript  ( javascript )

A instrução a seguir insere uma nova linha com um formato de email válido na contactstabela:

INSERT INTO contacts(name, email) 
VALUES("John Doe", "[email protected]");Linguagem de código:  JavaScript  ( javascript )

Funciona conforme o esperado.

Porém, se você inserir um novo contato com um endereço de e-mail inválido, a CHECKrestrição será violada, o que resultará na rejeição da inserção:

INSERT INTO contacts(name, email) 
VALUES("Jane Doe", "jane.doe@mysqltutorial");Linguagem de código:  JavaScript  ( javascript )

Saída:

ERROR 3819 (HY000): Check constraint 'email_validation' is violated.Linguagem de código:  JavaScript  ( javascript )

Da mesma forma, se você atualizar um e-mail existente para um formato inválido, a alteração não será aplicada:

UPDATE 
  contacts 
SET 
  email = 'invalid email' 
WHERE 
  id = 1;Linguagem de código:  JavaScript  ( javascript )

Resumo

  • Use a REGEXP_LIKE()função para verificar se uma string de entrada corresponde a uma expressão regular.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *