среда, 5 октября 2011 г.

Проверка float-значения в PHP

По работе потребовалось проверить получаемое из формы значение на предмет плавающей точки. В частности, в форме вводится площадь и цена в деньгах. Проект разрабатывается на Zend Framework, поэтому совершенно логично в голову придет решение навскидку - использовать родной валидатор Zend_Validade_Float. Однако практика показала, что он ведет себя очень странно, и это не фича, а баг, тянущийся уже долгое время.

Ок, можно сделать собственный валидатор и подключить его к форме. Но тогда мы возвращаемся к исходной теме - проверки введенного значения. Первая же мысль - is_float. Увы и ах, эта функция лишь проверяет ТИП переменной, а любое значение из формы возвращается типом string. Так что мимо кассы.

Перерыв половину интернетов, я нашел оптимальное решение - проверка регулярными выражениями. Они медленные, да. Но и момент не очень тонкий, хайлоадности в нем нет, так что можно смело использовать. А проверка вот:

function isfloat($val) {
return (bool)preg_match("/^[+-]?(([0-9]+)|([0-9]*\.[0-9]+|[0-9]+\.[0-9]*)|(([0-9]+|([0-9]*\.[0-9]+|[0-9]+\.[0-9]*))[eE][+-]?[0-9]+))$/", $mval);
}

понедельник, 6 июня 2011 г.

О мотивациях.

Только что почитал отчет о рынке смартфонов в мире. Натуральным образом вырос Андроид (за год в четыре раза), где-то на десять процентов вырос айос. Остальные штуки я не учитываю — блекберри это совершенно отдельный собственный мир, симбиан будет падать по случаю прекращения поддержки, а виндавз фон еще не окуклился как следует.

Поэтому поговорим об Андроидах. Дело всё в том, что гугл науськал производителей смартфонов против Эппла. Дескать, вот вам мобильная ось, делайте под неё что хотите (да и с ней самой делайте что хотите). Оттого устройств с андроидом так много и все они такие бестолковые. Нет системы. Да, я не спорю, в них по десять ядер и гигабайты оперативной памяти, но что стоят эти терафлопсы, если этот телефон под управлением Андроида не в состоянии обеспечить высокий FPS для энгри бёрдз и тормозит нещадно? Что стоит стилус, телевизор и карта памяти, если устройство садится и у него плохой экран? (а экраны сейчас плохие у всех, кроме догадайтесь-какой-фирмы) (хотя это и ненадолго) (а когда у всех будут одинаковые экраны, эппл придумает что-то еще).

Вы говорите, что айос закрытая система (ПРОПРИЕТАРНАЯ БЛЕАТЬ), айфон нельзя использовать как флешку и у него нет микроусб-порта. Безусловно, айфон в виде флешки (или наоборот?) — это его ключевой фичюр реквест, разумеется. Вы говорите, что айфон можно синхронизировать только в айтюнсе. Вы говорите, что эппл следит за юзерами посредством айфонов.

А я скажу, что уже есть девелоперский API для синхронизации айос устройств. Я скажу, что айфон можно использовать как флешку с помощью того же айтюнса или альтернативного софта. Я скажу, что многие отказывают в обслуживании рутованных андроидных устройств. Что открытость андроида — всего лишь филькина грамота и по сути ничего не стоит. Зачем вам эта открытость? Вы в этой открытости не смогли углядеть слежку за вами же. Мне всё равно — открытая система или закрытая. Лишь бы она хорошо и быстро работала.

Эпплу не нужна сотня устройств с разными архитектурами, решениями и аппаратной частью. Вместо того, чтобы делать универсальную ось, они сфокусировались на небольшом семействе, а ресурсы, не занятые этой оптимизацией, решили направить на развитие новых фич.