Войти

Показать полную графическую версию : Проверка символов (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*$

Sham
15-06-2012, 14:14
после 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

Sham
15-06-2012, 15:43
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, формула и сейчас просчитывается отлично.

Sham
15-06-2012, 15:57
зачем делать float »
чтобы не делать preg_match

aggressor_
15-06-2012, 16:00
Sham, окончательно запутался. Как тогда будет выглядеть конечный вариант всего этого?

Sham
15-06-2012, 17:08
$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)

Sham
15-06-2012, 17:32
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