从变量中提取第一个数字

I have variables that always start with a number or numbers and need the script to determine where this number ends, now for an example the variable can be like the following:

1234-hello1.jpg

1 hello1.gif

1234hello1.gif

123456 hello1.gif

What I am trying to say is an explode function would not work, and my regex is very poor, I just need to be left with the first number and ignore any other number in the string. I just need to be left with the number(s) in bold.

Thanks in advance...

$arr = str_split($str);
for($i = 0; $i < count($arr); ++$i){
   if(!is_numeric($arr[$i])){
       echo "Number ends at index: " . $i;
       break;
   }
}

You could also put the numbers into an array using $arr[$i] if you so wish. This is probably a lot more readable than using regex.

You could add logic to allow one decimal point but from the question it seems you only want integers.

http://sandbox.onlinephpfunctions.com/code/fd21437e8c1502b56572a624cf6e4683cf483a8d - Example of working code

I think you can remove no from your sting with below code.

preg_replace('/[0-9]+/', '', $string);

here $string is variable you can change this name as per your variable name.

A RegEx is indeed the way to go:

function getVal($var){
    $retVal = '';

    if(preg_match('#^(\d+)#', $var, $aCapture)){  //Look for the digits
        $retVal = $aCapture[1];    //Use the digits captured in the brackets from the RegEx match
    }
    return $retVal;
}

What this does is look for only digits at the start of the string, capture them in an array, and use the piece we want.

preg_match('/^[0-9]+/', $yourString, $match);

Now you can check $match for the integer.

If you are sure that the number is an integer, at the beginning and always present, you can use sscanf:

echo sscanf($val, '%d')[0];

This is the RegEx what you need:

^.*\b([0-9]+)

I don't know which language you are writting, so just give you the RegEx. It's tested in Notepad++ with your Examples.

Peter Bennett, You can try like this. First, convert a string(1234-hello1.jpg) to an Array. then you can check whether given array element is Number or not.

$str = "1234-hello1.jpg";       //given string
$count = strlen($str);          //count length of string
$num = array();

for($i=0; $i < $count; $i++)
{
    if(is_numeric($str[$i]))     //to check element is Number or Not
    {
        $num[] = $str[$i];       //if it's number, than add it to another array
    }
    else break;                  //if array element is not a number. exit **For** loop
}

$number = $num;                //See o/p
$number = implode("", $number);   
echo $number;                    // Now $number is String.

Out Put

 $num = Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
);


$number = "1234";   //string

So finally you got your required string.

Here is the full working script, with thanks to @user1...

$str = "1234-hello1.jpg";
$arr = str_split($str);
for($i = 0; $i < count($arr); ++$i){
   if(!is_numeric($arr[$i])){
       //echo "Number ends at index: " . $i;       
       break;
  } else {
        $num[] = $str[$i];   
   }
}

$fullNumber = join("", $num);

echo $fullNumber;