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,c
a correspondência diferencia maiúsculas de minúsculas, enquantoi
a correspondência não diferencia maiúsculas de minúsculas.
Se string
ou pattern
for 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.0
corresponde à 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.0
que corresponde ao padrão, a REGEXP_LIKE()
função retorna 1.
O exemplo a seguir usa a REGEXP_LIKE()
função e retorna 0
porque 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 WHERE
clá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 contacts
com três colunas: id
, name
e 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 email
coluna, você pode verificar se o formato do email é válido.
Para fazer isso você pode usar o REGEXP_LIKE
com uma CHECK
restrição . A CHECK
restriçã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 CHECK
restrição à email
coluna da contacts
tabela:
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])?/g
Linguagem de código: JavaScript ( javascript )
A instrução a seguir insere uma nova linha com um formato de email válido na contacts
tabela:
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 CHECK
restriçã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.