- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
Montando uma expressão regular para verificar se um número é par ou impar.
Antes de sair desesperado montando a regex, precisamos entender a expressão que iremos validar.
Qual é a regra que define se um número é par ou ímpar ?
Um número par quando dividido pelo número dois, tem como resultado um número inteiro, caso contrário esse número é ímpar.
O número zero por uma série de fatores que não precisamos mencionar aqui, também é considerado par.
Tendo essas informações em mente, podemos afirmar que qualquer número inteiro, independentemente da quantidade dígitos poderá ser considerado par, desde de que o último dígito seja par, o mesmo conceito aplica-se ao número ímpar.
Para validar precisamos que:
- Comece com um número inteiro de 0 à 9 contendo zero ou mais dígitos.
- ^[0-9]*
Para número:
- Par
- O último dígito tem ser qualquer um dos números pares: 0 2 4 6 8.
- [02468]$
- Ímpar
- O último dígito tem ser qualquer um dos números ímpares: 1 3 5 7 9.
- [13579]$
Agora que já montamos as partes da nossa regex, vamos uni-las para conseguir nosso objetivo.
Primeiro, vou iniciar uma contagem de 0 à 20 sem aplicar nenhum tipo de filtro.
$ printf '%d\n' {0..20}
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Agora vou realizar a mesma contagem, porém filtrando apenas os números pares, utilizando a nossa regex '^[0-9]*[02468]$'.
$ printf '%s\n' {0..20} | egrep '^[0-9]*[02468]$'
0
2
4
6
8
10
12
14
16
18
20
0
2
4
6
8
10
12
14
16
18
20
Note que somente os números pares foram retornados, pois os ímpares não casaram com a expressão.
Agora, vou repetir o processo, filtrando apenas os números ímpares, utilizando a expressão '^[0-9]*[13579]$'.
printf '%s\n' {0..20} | egrep '^[0-9]*[13579]$'
1
3
5
7
9
11
13
15
17
19
1
3
5
7
9
11
13
15
17
19
Também podemos utilizar a expressão com o comando if para avaliar os dados informados pelo usuário.
Exemplo
#!/bin/bash
# Declarando variável do tipo inteiro,
# caso o valor seja nulo ou inválido, assume valor 0.
declare -i num
# Lê o número informado pelo usuário.
read num
# Verifica se o número é par
if [[ $num =~ ^[0-9]*[02468]$ ]]; then
echo "Número par"
else
# Senão é impar.
echo "Número impar."
fi
# fim
# Declarando variável do tipo inteiro,
# caso o valor seja nulo ou inválido, assume valor 0.
declare -i num
# Lê o número informado pelo usuário.
read num
# Verifica se o número é par
if [[ $num =~ ^[0-9]*[02468]$ ]]; then
echo "Número par"
else
# Senão é impar.
echo "Número impar."
fi
# fim
Resumindo, se um dia precisarem realizar tal tarefa, já sabem:
Números pares: '^[0-9]*[02468]$'
Números ímpares: '^[0-9]*[13579]$'
Claro que existem inúmeras formas de fazer isso e espero futuramente aborda-las.
Valeu jovens, um grande abraço e até a próxima.
Comentários
Postar um comentário