Точка и запятая в дробных числах...

Точка и запятая в дробных числах...

При вводе в поле формы дробного числа в качестве разделителя воспринимается только точка.

Как лучше сделать, чтобы и точка, и запятая, и, может быть, любой другой нечисловой символ воспринимался как разделитель?
 

ksnk

прохожий
делать $s=[m]str_replace[/m](',','.',$s);
А для любого "нечислового символа" - [m]preg_replace[/m]
 
str_replace хорошо, да не очень, поскольку str_replace - строковая функция.
После замены запятой на точку у меня идет проверка is_numeric(). Так вот эта функция не опознает полученную переменную как число и отбрасывает. Задать числовой тип искусственно? Не получается... help!
 

Фанат

oncle terrible
Команда форума
как интересно!
а, типа, до замены, у тебя было число?
 

Фанат

oncle terrible
Команда форума
да что ты говоришь?
прямо из формы?
и с любым нечисловым разделителем?
то есть, 999=00, пришедшее из формы у тебя определяется, как число? Я правильно тебя понял?
 
is_numeric проверяет не то, число это или строка, а есть ли число, чтобы сохранить его в базе. А если пустая строка, то ничего не делает. Может есть лучше вариант. Но это старый скрипт.
Пустые строки не сохраняет просто...

-~{}~ 04.09.05 12:19:

Нет, неправильно понял. В том то и дело, что с запятой или другим знаком как число не определяет. В этом и проблема.
Если заменяю запятую на точку при помощи str_replace, она то заменяется, но как число не воспринимается. Как быть?
 

Фанат

oncle terrible
Команда форума
постарайся написать ещё раз то же самое, но только понятно.
и поясни, какое этот поток сознания имеет отношение к вопросу, который я тебе задал.
Для удобства я могу его даже повторить:
то есть, после замены у тебя получается строка, а до замены, значит, у тебя было число?
Ты можешь ответить - ДА или НЕТ?
и если у тебя было число, то привести ПРИМЕР, который ты, КОНЕЧНО ЖЕ, написал перед тем, как делать такие утверждения?
 

Фанат

oncle terrible
Команда форума
Если заменяю запятую на точку при помощи str_replace, она то заменяется, но как число не воспринимается. Как быть?
наконец-то, первый осмысленный вопрос.
значит, претензий к str_replace больше нет?
или остались?
 
Нет.
Была строка с запятой. Запятую преобразовал в точку. Как сделать это числом. settype что то не получается. Ни разу не использовал.
 

Фанат

oncle terrible
Команда форума
отлично.
логический аппарат в голове начал, наконец, работать.
и объяснил туловищу, что если на вход к функции попадает СТРОКА, то нет смысла предъявлять претензии к функцииза то, что она возвращает тоже строку.

прекрасно.
Теперь ответим на твой вопрос, "что делать с проверкой"
Очено просто.
Выкини эту проверку нафиг.
 
Я правильно тебя понял? Если не будет проверки, при вставке в базу переменная определится как число.

Уже проверяю...
 

Фанат

oncle terrible
Команда форума
вот только про защиту базы данных надо помнить.
либо проверяй через ctype_digit, либо приводи насильно к нужному типу, либо помещай в базу как строку, как описано в факе по слешам
 
ОК. Спасиб

-~{}~ 05.09.05 16:57:

ctype_digit не подошла. Разделители разряда не считает числом, а у меня дробные числа.
Привел насильно к типу (float), а потом проверку is_numeric оставил.

Все пашет.
 
Сверху