Извлеките первое число(числа) из переменной


У меня есть переменные, которые всегда начинаются с числа или чисел, и мне нужен скрипт, чтобы определить, где заканчивается это число, теперь для примера переменная может быть следующей:

1234-hello1.jpg

1 hello1.gif

1234hello1.gif

123456 hello1.gif

Я пытаюсь сказать, что функция разнесения не будет работать, и мое регулярное выражение очень плохое, мне просто нужно оставить первое число и игнорировать любые другое число в строке. Мне просто нужно, чтобы меня оставили с цифрами, выделенными жирным шрифтом.

Заранее благодарю...

Author: Peter Bennett, 2016-08-08

8 answers

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

Вы также можете поместить числа в массив, используя $arr[$i], если хотите. Это, вероятно, намного более читабельно, чем использование регулярного выражения.

Вы могли бы добавить логику, позволяющую использовать одну десятичную точку, но, судя по вопросу, вам нужны только целые числа.

Http://sandbox.onlinephpfunctions.com/code/fd21437e8c1502b56572a624cf6e4683cf483a8d - Пример рабочего кода

 2
Author: iyop45, 2016-08-08 10:24:51

Питер Беннетт, Ты можешь попробовать вот так. Сначала преобразуйте строку(1234-hello1.jpg) к массиву. затем вы можете проверить, является ли данный элемент массива номером или нет.

$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.

Выложено

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


$number = "1234";   //string

Итак, наконец-то вы получили требуемую строку.

 1
Author: Smit Patadiya, 2016-08-08 11:11:57

Я думаю, что вы можете удалить no из своего жала с помощью кода ниже.

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

Здесь $string переменная, вы можете изменить это имя в соответствии с вашим именем переменной.

 0
Author: Denis Bhojvani, 2016-08-08 10:15:17

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

Теперь вы можете проверить $match на наличие целого числа.

 0
Author: Celoain, 2016-08-08 10:17:34

Если вы уверены, что число является целым числом, в начале и всегда присутствует, вы можете использовать sscanf:

echo sscanf($val, '%d')[0];
 0
Author: Casimir et Hippolyte, 2016-08-08 10:21:23

Регулярное выражение - это действительно правильный путь:

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;
}

Что это делает, так это ищет только цифры в начале строки, записывает их в массив и использует нужный фрагмент.

 0
Author: Ben Hillier, 2016-08-08 10:24:05

Это регулярное выражение, которое вам нужно:

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

Я не знаю, на каком языке вы пишете, поэтому просто дайте вам регулярное выражение. Он протестирован в Notepad++ с вашими примерами.

 0
Author: gyun, 2016-08-08 10:35:38

Вот полный рабочий сценарий, с благодарностью @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;
 0
Author: Peter Bennett, 2016-08-08 11:47:00