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