Jump to content
Umbus

[Resolvido] Eliminar letras e caracteres estranhos

Recommended Posts

Umbus

Boas pessoal,

Gostava de eliminar tudo de uma string para apenas ficar com este tipo de numeros:

45.125855

546456.546456

54546.23

...

Ou seja numero+ponto+numero

Para alem disso, gostaria de que todas as virgulas passassem a pontos, e obrigasse a ter apenas o ultimo ponto da string seguido de um numero

Alguma ajuda?

Obrigado

Edited by Umbus

Eu sou eu e eu sou aquele que sou eu...

Share this post


Link to post
Share on other sites
NunoDinis

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
Umbus

Eu usei o preg_replace e o str_replace. Com o str_replace fiz a alteração de virgulas por pontos mas o preg_replace n consegui eliminar os simbulos e letras, o codigo não deve tar certo, n tou em casa portanto pode n ser bem o que pus mas foi algo do genero:

^[0-9]{1,}+(/.[0-9]{1,})?$


Eu sou eu e eu sou aquele que sou eu...

Share this post


Link to post
Share on other sites
Umbus

N tenho exemplos porque e para um formulario para utilizadores quero apenas prevenir craches. O que quero esta explicado numero um ponto e outro numero. Acho e que o codigo regex nao deve estar bem feito.


Eu sou eu e eu sou aquele que sou eu...

Share this post


Link to post
Share on other sites
Umbus

Obrigado. So uma duvida nao e preciso colocar antes assim:

#[0-9]{1,}+\.[0-9]{1,}+#

Porque o numero pode ter varios algorismos?

E assim:

#[0-9]{1,}+(\.[0-9]{1,})?+#

Se houver um numero sem ponto?


Eu sou eu e eu sou aquele que sou eu...

Share this post


Link to post
Share on other sites
Umbus

Desculpa podes explicar o significado do \d? Nao conheço.

Desde ja uma grande obrigado nao testei ainda mas assim que possivel testarei.


Eu sou eu e eu sou aquele que sou eu...

Share this post


Link to post
Share on other sites
yoda

\d é igual a [0-9]

Aqui está uma correcção ao anterior :

$regex = '#(\d+(\.\d+)?)#';

edit : ficou um pouco mais complexo, mas funciona bem.

versão de testes :

<?php
$cases = array(
'some text jajsjas 212.112 jia ahkb 2.5 nayjsd ds 123.12.42',
'some text jajsjas 212.112 jia 3. ahkb nayjsd ds 0 ',
'some text jajsjas 2.112 jia .3 ahkb nayjsd 7 ds . ',
);
foreach($cases as $id=>$string)
{
$matches = array();

preg_match_all('#[\d+\.]+#', $string, $result);

foreach($result[0] as $match)
{
 if (substr_count($match, '.') <= 1) {
  if (preg_match('#(\d+(\.\d+)?)#', $match, $result))
  {
   $matches[] = $result[0];
  }
 }
}
echo 'test '.$id.' : '.implode(' || ', $matches).'<br />';
}

Edited by yoda

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.