Показать полную графическую версию : Проверка символов (PHP)
aggressor_
15-06-2012, 04:26
Здравствуйте,
использую следующий код для фильтрации вводимого
$a = $_POST['a'];
$a = str_replace(",",".",$a);
if(!preg_match("/^[\d.]+$/",$a))
{
echo "Введите число";
exit;
}
Как можно ограничить ввод таких вариаций?
,,
...
3.
7...,,3
и т.д.
т.е. должны проходить только натуральные числа или же десятичные дроби (с одной запятой или точкой).
Tonny_Bennet
15-06-2012, 09:19
Подойдёт (http://regexp.com.ua/regex/detail/pattern135) ?
^[+]?\d*\.?\d*[1-9]+\d*$)|(^[+]?[1-9]+\d*\.\d*$
после str_replace делайте приведение к типу float и проверяйте на 0.
Подойдёт ? »
неа, там ошибка на ошибке.
так правильнее пм
^[\+\-]?\d+(?:[\.\,]\d+)?$
ps по знаку разделения см. setlocale LC_NUMERIC
aggressor_
15-06-2012, 15:14
после str_replace делайте приведение к типу float и проверяйте на 0. »
мало знаком с php... не могли бы вы подсказать, как это сделать?
Tonny_Bennet
15-06-2012, 15:36
Sham, сразу не присмотрелся. Действительно ошибки.
Вот здесь (http://www.php.su/learnphp/datatypes/?mn#strtoint) предложено сделать так:
<?php echo "\$foo==$foo; тип: " . gettype ($foo) . "<br />\n"; ?>
http://www.php.su/functions/?gettype
http://www.php.net/manual/ru/language.types.type-juggling.php#language.types.typecasting
$a = isset($_POST['a']) ? (float) $_POST['a'] : 0;
php.su »
официальный ресурс php.net, откуда все копипастят
aggressor_
15-06-2012, 15:50
Tonny_Bennet,
да, я это читал.
Не совсем понимаю зачем делать float, формула и сейчас просчитывается отлично.
зачем делать float »
чтобы не делать preg_match
aggressor_
15-06-2012, 16:00
Sham, окончательно запутался. Как тогда будет выглядеть конечный вариант всего этого?
$a = isset($_POST['a']) ? (float) str_replace(',', '.', $_POST['a']) : null;
if (!$a) exit ('Введите число');
aggressor_
15-06-2012, 17:22
Если заменить
$a = $_POST['a'];
$a = str_replace(",",".",$a);
if(!preg_match("/^[\+\-]?\d+(?:[\.\,]\d+)?$/",$a))
{
echo "Введите число";
exit;
}
на это
$a = isset($_POST['a']) ? (float) str_replace(',', '.', $_POST['a']) : null;
if (!$a) exit ('Введите число');
то фильтр пропускает цифры с буквами (напр: 44r)
http://www.php.net/manual/ru/language.types.string.php#language.types.string.conversion
выведите $a, понятно будет...
Tonny_Bennet
15-06-2012, 17:34
официальный ресурс php.net, откуда все копипастят »
Я в курсе, просто php.su рускоязычный и его Яндекс первой строчкой отдаёт ;)
aggressor_, а нельзя использовать функцию is_float (http://ru2.php.net/manual/ru/function.is-float.php)?
P.S. К сожалению нет под рукой веб-сервера что б самому проверить
aggressor_
15-06-2012, 17:46
Sham, понял)
Только немного не то, нужно чтобы не выполнялся php, если введены не числа. А так он просто обрезает буквы и повторяющиеся знаки и выполняет число.
Tonny_Bennet, php для меня большая загадка :unsure:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.