Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Проверка символов (PHP) (http://forum.oszone.net/showthread.php?t=236683)

aggressor_ 15-06-2012 04:26 1934509

Проверка символов (PHP)
 
Здравствуйте,
использую следующий код для фильтрации вводимого
PHP код:

$a $_POST['a'];
$a str_replace(",",".",$a);
if(!
preg_match("/^[\d.]+$/",$a))
    { 
    echo 
"Введите число"
    exit;
    } 

Как можно ограничить ввод таких вариаций?
Код:

,,
...
3.
7...,,3
и т.д.

т.е. должны проходить только натуральные числа или же десятичные дроби (с одной запятой или точкой).

Tonny_Bennet 15-06-2012 09:19 1934548

Подойдёт ?

Код:

^[+]?\d*\.?\d*[1-9]+\d*$)|(^[+]?[1-9]+\d*\.\d*$

Sham 15-06-2012 14:14 1934725

после str_replace делайте приведение к типу float и проверяйте на 0.
Цитата:

Цитата Tonny_Bennet
Подойдёт ? »

неа, там ошибка на ошибке.
так правильнее пм
Код:

^[\+\-]?\d+(?:[\.\,]\d+)?$
ps по знаку разделения см. setlocale LC_NUMERIC

aggressor_ 15-06-2012 15:14 1934756

Цитата:

Цитата Sham
после str_replace делайте приведение к типу float и проверяйте на 0. »

мало знаком с php... не могли бы вы подсказать, как это сделать?

Tonny_Bennet 15-06-2012 15:36 1934775

Sham, сразу не присмотрелся. Действительно ошибки.

Вот здесь предложено сделать так:

PHP код:

<?php echo "\$foo==$foo; тип: " gettype ($foo) . "<br />\n"?>

http://www.php.su/functions/?gettype

Sham 15-06-2012 15:43 1934783

http://www.php.net/manual/ru/languag...es.typecasting
PHP код:

$a = isset($_POST['a']) ? (float) $_POST['a'] : 0

Цитата:

Цитата Tonny_Bennet
php.su »

официальный ресурс php.net, откуда все копипастят

aggressor_ 15-06-2012 15:50 1934791

Tonny_Bennet,
да, я это читал.
Не совсем понимаю зачем делать float, формула и сейчас просчитывается отлично.

Sham 15-06-2012 15:57 1934796

Цитата:

Цитата aggressor_
зачем делать float »

чтобы не делать preg_match

aggressor_ 15-06-2012 16:00 1934800

Sham, окончательно запутался. Как тогда будет выглядеть конечный вариант всего этого?

Sham 15-06-2012 17:08 1934845

PHP код:

$a = isset($_POST['a']) ? (float) str_replace(',''.'$_POST['a']) : null;

if (!
$a) exit ('Введите число'); 


aggressor_ 15-06-2012 17:22 1934851

Если заменить
PHP код:

$a $_POST['a'];
$a str_replace(",",".",$a);
if(!
preg_match("/^[\+\-]?\d+(?:[\.\,]\d+)?$/",$a))
    { 
    echo 
"Введите число"
    exit;
    } 

на это
PHP код:

$a = isset($_POST['a']) ? (float) str_replace(',''.'$_POST['a']) : null;

if (!
$a) exit ('Введите число'); 

то фильтр пропускает цифры с буквами (напр: 44r)

Sham 15-06-2012 17:32 1934855

http://www.php.net/manual/ru/languag...ing.conversion

выведите $a, понятно будет...

Tonny_Bennet 15-06-2012 17:34 1934858

Цитата:

Цитата Sham
официальный ресурс php.net, откуда все копипастят »

Я в курсе, просто php.su рускоязычный и его Яндекс первой строчкой отдаёт ;)

aggressor_, а нельзя использовать функцию is_float?

P.S. К сожалению нет под рукой веб-сервера что б самому проверить

aggressor_ 15-06-2012 17:46 1934861

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

Tonny_Bennet, php для меня большая загадка :unsure:


Время: 18:55.

Время: 18:55.
© OSzone.net 2001-