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

Foi útil?

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)?$
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top