Удалить символы до и после

Здесь я использую 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
Другие вопросы по тегам