Столкнулся с проблемой, проверки числа на десятичную систему.
Допустим передают число 042 для редактирования 42 записи, вместо этого php отдаёт 34. Методом гугления не нашёл ничего(может запрос не правильно формулировал) что бы проверить на систему числа(2, 8, 10, 16).
Мой костыль проверка даёт эффект не всегда, только когда параметр string
if (substr($param[0], 0, 1) == 0 || substr($param[0], 0, 2) == "0x" || substr($param[0], 0, 2) == "0b") Throw new Exception($message);
Есть какой то встроенный метод проверки системы числа? Или кто то уже сталкивался и есть решение
Дело в том, что не для строк не существует никаких систем счислений:
var_dump([
100,
0100,
0x100,
0b100
]); // [100, 64, 256, 4]
Это просто способ указать литерал в другой системе счисления, такая форма абсолютно неотличима от своего значения в десятичном виде:
var_dump([
0100 === 64,
0x100 === 256,
0b100 === 4
]); // [true, true, true]
Не имеет смысла пытаться отличить 042 от 34. Оба литерала обозначают одно и то же число. Если в итоге получается не то, что клиентский код имел в виду - виноват клиентский код.
Пока все настаивали и говорили что нельзя такого сделать и ставили минусы к вопросу я нашёл ответ на английском стаке. Надеюсь в дальнейшем поможет кому либо
function is_decimal( $val )
{
return is_numeric( $val ) && floor( $val ) != $val;
}
https://stackoverflow.com/questions/6772603/check-if-number-is-decimal
Спасибо всем кто говорил что такого нельзя сделать и не имеет смысла
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости