Удалить символы до и после
Здесь я использую strstr
удалить после символов и substr
используется для удаления перед символом. Но как убрать все символы до и после сразу?
Мне нужно только получить 80
из этой переменной $mrk = 'Science-80_John'
пропустив Science
а также John
,
Что я делаю
$mrk = 'Science-80_John';
$mark = substr($mrk,strpos($mrk,'-')+1);
//output: 80_John
echo strstr($mark, '_', true);
//output: 80
Любой другой короткий или лучший способ?
2 ответа
Так как оп попросил короткий или лучший способ. Number_from_string может работать лучше, используя приведение. игнорирование minus signs
(которые могут быть дефисами в этом примере), мы получаем положительное целое число.
>>> $mrk = 'Science-80_John';
=> "Science-80_John"
>>> $num = (int)strpbrk ($mrk, "0123456789");
=> 80
Приведенный выше вариант использования предполагает, помимо извлечения только одного положительного целого числа, что scientific notation
все в порядке. Джон решил быть умным парнем и поменять свою подпись на очень большое число. Мы должны решить, при каких обстоятельствах система должна принять или отклонить scientific notation
,
>>> $mrk = 'Science-80E+21_John45';
>>> $num = (int)strpbrk ($mrk, "0123456789");
=> 9223372036854775807 // ack!
>>> $pat = "0123456789";
>>> $num = strpbrk ($mrk, $pat);
>>> $num = substr($num,0 ,strspn($num, $pat));
=> "80"
Так как новое возвращаемое значение состоит из цифр, нам больше не требуется приведение из-за жонглирования типов в PHP. Если чисел нет вообще, это решение возвращает пустую строку, ""
которая выдаст ошибку, если позже будет использована в расчетах. Кастинг в (int)
молча вернется 0
но не говорите нам, если база данных нуждается в исправлении. Что будет работать лучше в этой ситуации? Еще одно дизайнерское решение.
Строковые функции также избегают потенциальных ловушек с регулярным выражением в некоторых решениях из Извлечение чисел из строки. Что произойдет, если в $ str будет добавлено "45"? Результат, 8045
вероятно не желательно.
>>> $mrk = 'Science-80_John45';
=> "Science-80_John45"
>>> $newStr = preg_replace("/\D+/", "", $mrk);
=> "8045"
Вы можете использовать регулярные выражения в preg_replace()
и удалите добавить нецифровые символы
$mrk = 'Science-80_John';
$newStr = preg_replace("/\D+/", "", $mrk);
// 80