2013-07-09 2 views
3
function intfix($value) { 
     $value = trim($value); 
     $value = preg_replace("/[^0-9](.*)$/", '', $value); 
     return $value+0; 
    } 

Эта функция должна обрабатывать очень большие числа, и избавиться от всего, что не является числом или вернуть 0.Мои большие номера функции форматирования ведет Одди

echo intfix(123123123123123); // 1 

Сумасшедшая вещь это только верните 1 на мой живой сервер, но правильную сумму на моем локальном сервере. Что тут происходит?

+4

Возможно, вы используете 32-разрядную операционную систему, и вы превысите максимальное значение. Нужно переключиться на 64 бит, чтобы обрабатывать такие большие числа. (Хорошо, если это не исправление, по крайней мере, это умная вещь, о которой нужно помнить и не ударять головой о стену, когда она ударяет вас) – Twisted1919

+0

ошибка находится на вашем локальном сервере. Живой сервер верен. как странно это? –

+1

Заметив приведение к целому числу, вы только сможете представлять числа до PHP_INT_MAX – Orangepill

ответ

3

Изменение:

$value = preg_replace("/[^0-9](.*)/", '', $value); 

To:

$value = preg_replace("/[^0-9]+/", '', $value); 

Что пошло не так? Вы выбрали 1 номер, и все, что находится на пути. Ничем, поэтому вы сохраняете 1 номер, потому что он не соответствует ни что иное, как число, а затем заменяет все на ничего.

+0

Я не мог понять, почему это регулярное выражение было так ... – Bojangles

3

Вы выбираете только первое число в своем регулярном выражении.

Изменить его: preg_replace("/[^0-9]+/", '', $value);

Смежные вопросы