Se eu tiver os seguintes valores:
$var1 = AR3,373.31
$var2 = 12.322,11T
Como posso criar uma nova variável e configurá-la para uma cópia dos dados que possuem caracteres não numéricos removidos, com exceção de vírgulas e pontos? Os valores acima retornariam os seguintes resultados:
$var1_copy = 3,373.31
$var2_copy = 12.322,11
Estou surpreso que não tenha havido menção a filter_var aqui por ser uma pergunta tão antiga ...
O PHP tem um método embutido de fazer isso usando filtros de higienização . Especificamente, aquele a ser usado nessa situação é
FILTER_SANITIZE_NUMBER_FLOAT
com osFILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND
sinalizadores. Igual a:Também pode valer a pena notar que, como é embutido no PHP, é um pouco mais rápido do que usar o regex com as bibliotecas atuais do PHP (embora literalmente em nanossegundos).
fonte
Maneira mais simples de remover verdadeiramente todos os caracteres não numéricos:
\D
representa "qualquer caractere que não seja um dígito decimal"http://php.net/manual/en/regexp.reference.escape.php
fonte
Você pode usar
filter_var
para remover todos os caracteres ilegais, exceto dígitos, pontos e vírgula.FILTER_SANITIZE_NUMBER_FLOAT
filtro é usado para remover todos os caracteres não numéricos da sequência.FILTER_FLAG_ALLOW_FRACTION
está permitindo separador de frações" . "
FILTER_FLAG_ALLOW_THOUSAND
obter vírgula da string.Código
Resultado
Para ler mais sobre os filtros filter_var () e Sanitize
fonte
Se a solicitação for remover todos os caracteres não numéricos (e não apenas um), talvez o anterior possa ser escrito dessa maneira de uma maneira muito simples (mas você pode escrever uma função para passar a string e fazer com que ela retorne o valor necessário sem caracteres) .. de qualquer forma..):
fonte
Se as letras estão sempre no começo ou no final, você pode simplesmente usar o recorte ... não é necessário regex
fonte
Mesma resposta que middaparka, mas remova o
,.
fonte