Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выражение для цены
 
 автор: and200   (08.12.2007 в 10:23)   письмо автору
 
 

Привет!!! У меня в магазине пользователи вводят цену в форму. Цена - десятичная дробь.При этом, может быть и целое число, без десятичной части.
Как сделать проверку на , что введено именно десятичное число или целое?

   
 
 автор: Саня   (08.12.2007 в 11:12)   письмо автору
 
   для: and200   (08.12.2007 в 10:23)
 

<?
$price 
"1324132,424";
if ( 
ctype_alnum($price) ) {
  print 
"Десятичное целое";
} elseif ( 
preg_match("/^\d+(\.|,)\d+$/"$price) ) {
  print 
"Десятичная дробь";
} else {
  print 
"Ни то, ни другое";
}

   
 
 автор: kasmanaft   (08.12.2007 в 11:57)   письмо автору
 
   для: Саня   (08.12.2007 в 11:12)
 

>> if ( ctype_alnum($price) ) {

ctype_digit(), наверное.

   
 
 автор: sim5   (08.12.2007 в 12:10)   письмо автору
 
   для: kasmanaft   (08.12.2007 в 11:57)
 

Вообще-то в качестве разделителя должна быть точка, а потому:
if (is_float($price)) ...

   
 
 автор: kasmanaft   (08.12.2007 в 12:36)   письмо автору
 
   для: sim5   (08.12.2007 в 12:10)
 

Строка никак не может быть float.

Хотя, может быть, подойдет if ((string)(float)$price === $price)

   
 
 автор: sim5   (08.12.2007 в 13:06)   письмо автору
 
   для: 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';

   
 
 автор: Гость   (08.12.2007 в 13:27)   письмо автору
 
   для: sim5   (08.12.2007 в 13:06)
 

как вариант просто преобразовывать запятую в точку :)

   
 
 автор: sim5   (08.12.2007 в 13:31)   письмо автору
 
   для: Гость   (08.12.2007 в 13:27)
 

Ну если не запрещать, то не можно, а нужно. )

   
 
 автор: Саня   (08.12.2007 в 14:33)   письмо автору
 
   для: sim5   (08.12.2007 в 13:06)
 

Ничего запрещать не надо. Так уж сложилось, что дробные числа в php записываются в американском формате, где разделителем является точка. А дробные числа в русском формате разделяются запятой.
Не нужно отнимать время покупателя незначительными мелочами, ведь вполне возможно добавить поддержку сразу обоих форматов. А необдуманно ограничивать свободу пользователей - удел непрофессионалов.

   
 
 автор: sim5   (08.12.2007 в 14:46)   письмо автору
 
   для: Саня   (08.12.2007 в 14:33)
 

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

   
 
 автор: SHAman   (08.12.2007 в 15:06)   письмо автору
 
   для: sim5   (08.12.2007 в 14:46)
 

попробуйте

/^\d+([.,]\d+)?$/

   
 
 автор: Саня   (08.12.2007 в 13:58)   письмо автору
 
   для: kasmanaft   (08.12.2007 в 11:57)
 

Да, именно ctype_digit().

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования