1

I have a string that represents a temperature. This string is dynamically parsed from a website and it can contain also negative values. For example, it can be -1 C, or 2 C and so on.

I want to get only the integer value. Here is my code:

$temp_number = preg_replace("/-?[0-9]+/", '', $value); 
echo "Temperature : ". $value . "Number : ".$temp_number."<br/>";

I thought that the temp_number should be the extracted number BUT it is the C for example. Here is my output.

Temperature : 0℃   Number : ℃

What should I use? I do not want to replace the string, I want to extract it.

ghostrider
  • 5,131
  • 14
  • 72
  • 120

5 Answers5

3

Try this instead:

$temp_number = preg_replace("/[^-0-9]+/", '', $value); 
echo "Temperature : ". $value . "Number : ".$temp_number."<br/>";

The regex of [^-0-9]+ basically states that it should strip away anything that is not a - or a number.

Giacomo1968
  • 25,759
  • 11
  • 71
  • 103
2

intval seems like an obvious solution here, much simpler than a regex. (Your example makes it appear as if the string is always just a number followed by C, and temperatures aren't usually recorded in decimals, so: intval.)

Proof: http://ideone.com/DjI3jG

Jessica
  • 7,075
  • 28
  • 39
2

1.Like Jessica said above intval is much simpler

$value = '0℃';
$number = intval($value);
echo $number; // which is 0 integer

2.Also, you can use filter_var

$value = '0℃';
$number = filter_var($value,FILTER_SANITIZE_NUMBER_INT);
0

Can you try this, Use /[^0-9]/ in your regex

$number = preg_replace("/[^0-9]/", '', $value);

echo "Temperature : ". $value . "Number : ".$number ."<br/>";
Krish R
  • 22,583
  • 7
  • 50
  • 59
0

try this use "/[^0-9]/" as regex

$value="100";
$temp_number = (int)preg_replace("/[^0-9]/", '', $value); 
echo "Temperature : ". $value . "Number : ".$temp_number."<br/>";

output:

Temperature : 100Number : 100
semirturgay
  • 4,151
  • 3
  • 30
  • 50