удалить символы до и после - PullRequest
0 голосов
/ 22 ноября 2018

Здесь я использую 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 ]

0 голосов
/ 22 ноября 2018

С тех пор как операционист попросил шорт или лучший способ.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"
0 голосов
/ 22 ноября 2018

Вы можете использовать регулярное выражение в preg_replace() и удалить добавление нецифровых символов

$mrk = 'Science-80_John';
$newStr = preg_replace("/\D+/", "", $mrk);
// 80
...