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;