PHP Moeda de Expressões Regulares
Pergunta
Eu estou tentando encontrar um pedaço de regex para coincidir com um valor de moeda.
Gostaria de corresponder apenas números e 1 ponto decimal ou seja
admitidos
- 10
- 100
- 100.00
não permitido
- caracteres alfa
- 100,00
- +/- 100
Eu tenho pesquisar e tentou muito poucos sem qualquer sorte.
Hope você pode aconselhar
Solução
if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
# Successful match
}
else
{
# Match attempt failed
}
Nota lateral : Se você quiser restringir quantas casas decimais você quiser, você pode fazer algo como isto:
/^[0-9]+(?:\.[0-9]{1,3})?$/im
Assim
100.000
irá corresponder, enquanto
100.0001
costume.
Se você precisar de qualquer ajuda, postar um comentário.
PS Se você puder, use o número formatador postado acima. funções nativas são sempre melhores (e mais rápido), caso contrário, esta solução irá atendê-lo bem.
Outras dicas
Como sobre este
if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
// correct currency format
} else {
//invalid currency format
}
Você pode querer considerar outras alternativas para usar uma expressão regular.
Por exemplo, há o NumberFormatter
classe , que fornece o número flexível e moeda análise e formatação , com configuração no apoio à internacionalização.
É construído em PHP 5.3 ou posterior e está disponível como uma extensão em versões anteriores do PHP 5.
Tente esta expressão regular:
^(?:[1-9]\d+|\d)(?:\.\d\d)?$