|
|
|
| Привет!!! У меня в магазине пользователи вводят цену в форму. Цена - десятичная дробь.При этом, может быть и целое число, без десятичной части.
Как сделать проверку на , что введено именно десятичное число или целое? | |
|
|
|
|
|
|
|
для: and200
(08.12.2007 в 10:23)
| |
<?
$price = "1324132,424";
if ( ctype_alnum($price) ) {
print "Десятичное целое";
} elseif ( preg_match("/^\d+(\.|,)\d+$/", $price) ) {
print "Десятичная дробь";
} else {
print "Ни то, ни другое";
}
|
| |
|
|
|
|
|
|
|
для: Саня
(08.12.2007 в 11:12)
| | >> if ( ctype_alnum($price) ) {
ctype_digit(), наверное. | |
|
|
|
|
|
|
|
для: kasmanaft
(08.12.2007 в 11:57)
| | Вообще-то в качестве разделителя должна быть точка, а потому:
if (is_float($price)) ... | |
|
|
|
|
|
|
|
для: sim5
(08.12.2007 в 12:10)
| | Строка никак не может быть float.
Хотя, может быть, подойдет if ((string)(float)$price === $price) | |
|
|
|
|
|
|
|
для: kasmanaft
(08.12.2007 в 12:36)
| | Ну строку преобразовать не долго, а вот 2 * 2,5 и 2 * 2.5 - вещи разные. Надо еще на стороне клиента запрещать 1,0 вводить, а только точку.
<?
$n = '5,5';
$m = '3.5';
if (is_float($n*1)) echo 'YES';
if (is_float($m*1)) echo 'YES';
|
| |
|
|
|
|
|
|
|
для: sim5
(08.12.2007 в 13:06)
| | как вариант просто преобразовывать запятую в точку :) | |
|
|
|
|
|
|
|
для: Гость
(08.12.2007 в 13:27)
| | Ну если не запрещать, то не можно, а нужно. ) | |
|
|
|
|
|
|
|
для: sim5
(08.12.2007 в 13:06)
| | Ничего запрещать не надо. Так уж сложилось, что дробные числа в php записываются в американском формате, где разделителем является точка. А дробные числа в русском формате разделяются запятой.
Не нужно отнимать время покупателя незначительными мелочами, ведь вполне возможно добавить поддержку сразу обоих форматов. А необдуманно ограничивать свободу пользователей - удел непрофессионалов. | |
|
|
|
|
|
|
|
для: Саня
(08.12.2007 в 14:33)
| | Ну это как посмотреть на этот вопрос. Думаю не старшно, просто предупредить пользователя о том, что вводить нужно точку, да и на цифровой клавиатуре это удобней будет. Ведь хотим мы этого или нет, но приходится ограничивать пользователя еще первым эшелоном (JS) и во многом (что-бы правильно было), так что добавление еще и точки в качестве ограничения, думаю не такая уж и проблема для пользователя. | |
|
|
|
|
|
|
|
для: sim5
(08.12.2007 в 14:46)
| | попробуйте
| |
|
|
|
|
|
|
|
для: kasmanaft
(08.12.2007 в 11:57)
| | Да, именно ctype_digit(). | |
|
|
|