Извлеките первое число(числа) из переменной
У меня есть переменные, которые всегда начинаются с числа или чисел, и мне нужен скрипт, чтобы определить, где заканчивается это число, теперь для примера переменная может быть следующей:
1234-hello1.jpg
1 hello1.gif
1234hello1.gif
123456 hello1.gif
Я пытаюсь сказать, что функция разнесения не будет работать, и мое регулярное выражение очень плохое, мне просто нужно оставить первое число и игнорировать любые другое число в строке. Мне просто нужно, чтобы меня оставили с цифрами, выделенными жирным шрифтом.
Заранее благодарю...
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 - Пример рабочего кода
Питер Беннетт, Ты можешь попробовать вот так. Сначала преобразуйте строку(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
Итак, наконец-то вы получили требуемую строку.
Я думаю, что вы можете удалить no из своего жала с помощью кода ниже.
preg_replace('/[0-9]+/', '', $string);
Здесь $string
переменная, вы можете изменить это имя в соответствии с вашим именем переменной.
preg_match('/^[0-9]+/', $yourString, $match);
Теперь вы можете проверить $match
на наличие целого числа.
Если вы уверены, что число является целым числом, в начале и всегда присутствует, вы можете использовать sscanf
:
echo sscanf($val, '%d')[0];
Регулярное выражение - это действительно правильный путь:
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;
}
Что это делает, так это ищет только цифры в начале строки, записывает их в массив и использует нужный фрагмент.
Это регулярное выражение, которое вам нужно:
^.*\b([0-9]+)
Я не знаю, на каком языке вы пишете, поэтому просто дайте вам регулярное выражение. Он протестирован в Notepad++ с вашими примерами.
Вот полный рабочий сценарий, с благодарностью @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;