is_int
input type="text"
пишу в ней 120, а is_int все-равно выдает, что не integer....
???
php.net/is_int:
Цитата:
To test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric()
А вообще-то можно написать функцию типа
Код:
function myisint($var) {
$tmp=$var+1;
$tmp=$tmp-1;
if($tmp==$var) {
return TRUE;
} else {
return FALSE;
};
$tmp=$var+1;
$tmp=$tmp-1;
if($tmp==$var) {
return TRUE;
} else {
return FALSE;
};
Сначала создаём массив цифр:
Код:
<?
var $numbers=Array('0','1','2','3','4','5','6','7','8','9');
?>
var $numbers=Array('0','1','2','3','4','5','6','7','8','9');
?>
Функция myisint (проверяет, что строка - целое число):
Код:
<?
function myisint($str) {
global $numbers;
if(strlen($str)==0) {
return FALSE; //проверяем, не пуста ли строка
};
if((@$str[0]=='-') or (@$str[0]=='+')) {
$i=1; //если первый символ + или -, не рассматриваем его
} else {
$i=0;
};
$isintstr=TRUE;
while(IsSet($str[$i])) {
if(!in_array(@$str[$i],$numbers)) {
$isintstr=FALSE; //если i-й символ - не цифра, строка - не целое число
break;
};
$i++;
};
return $isintstr; //возвращаем результат
};
?>
function myisint($str) {
global $numbers;
if(strlen($str)==0) {
return FALSE; //проверяем, не пуста ли строка
};
if((@$str[0]=='-') or (@$str[0]=='+')) {
$i=1; //если первый символ + или -, не рассматриваем его
} else {
$i=0;
};
$isintstr=TRUE;
while(IsSet($str[$i])) {
if(!in_array(@$str[$i],$numbers)) {
$isintstr=FALSE; //если i-й символ - не цифра, строка - не целое число
break;
};
$i++;
};
return $isintstr; //возвращаем результат
};
?>
Функция mydecreal (проверяет, что строка - число, в человеческом формате (типа 15.2345)):
Код:
<?
function mydecreal($str) {
global $numbers;
if(strlen($str)==0) {
return FALSE; //проверяем, не пуста ли строка
};
if((@$str[0]=='-') || (@$str[0]=='+')) {
$i=1; //если первый символ - знак, не рассматриваем его
} else {
$i=0;
};
$waspoint=FALSE;
$isdec=TRUE;
while(IsSet($str[$i])) {
if((@$str[$i]=='.') || (@$str[$i]==',')) {
//если попалась точка или запятая
if($waspoint) {
$isdec=FALSE; //если она уже была, строка - не дробное число
break;
} else {
$waspoint=TRUE; //если нет, запоминаем, что была
$i++;
continue; //следующий виток цикла
};
} else {
if(!in_array(@$str[$i],$numbers)) {
$isdec=FALSE; //если символ ещё и не цифра, строка - не дробное число
break;
};
};
$i++;
};
if(!$waspoint) {
//если не было точки - это не то, что нам нужно
return FALSE;
} else {
return $isdec; //возвращаем результат
};
};
?>
function mydecreal($str) {
global $numbers;
if(strlen($str)==0) {
return FALSE; //проверяем, не пуста ли строка
};
if((@$str[0]=='-') || (@$str[0]=='+')) {
$i=1; //если первый символ - знак, не рассматриваем его
} else {
$i=0;
};
$waspoint=FALSE;
$isdec=TRUE;
while(IsSet($str[$i])) {
if((@$str[$i]=='.') || (@$str[$i]==',')) {
//если попалась точка или запятая
if($waspoint) {
$isdec=FALSE; //если она уже была, строка - не дробное число
break;
} else {
$waspoint=TRUE; //если нет, запоминаем, что была
$i++;
continue; //следующий виток цикла
};
} else {
if(!in_array(@$str[$i],$numbers)) {
$isdec=FALSE; //если символ ещё и не цифра, строка - не дробное число
break;
};
};
$i++;
};
if(!$waspoint) {
//если не было точки - это не то, что нам нужно
return FALSE;
} else {
return $isdec; //возвращаем результат
};
};
?>
Функция myisreal - проверяет, является ли строка числом в экспоненциальном представлении:
Код:
<?
function myisreal($str) {
global $numbers;
if((@$str[0]=='+') || (@$str=='-')) {
$i=1; //если первый символ - знак, пропускаем его
} else {
$i=0;
};
$isreal=TRUE;
$wasexp=FALSE;
if(!((in_array(@$str[$i],$numbers)&&(($str[$i+1]=='.')||($str[$i+1]==','))&&(in_array($str[$i+2],$numbers)))) {
return FALSE; //проверяем, что первые три символа - цифра, точка и цифра
};
$i=$i+3;
while(IsSet($str[$i])) {
if(strtolower($str[$i])=='e') {
//если попался разделитель числа и мантиссы
$wasexp=TRUE;
$str2=substr($str,$i+1,strlen($str)-$i);
$isreal=myisint($str2); //проверяем, что оставшаяся часть - целое число
break;
};
if(!in_array(@$str[$i],$numbers)) {
$isreal=FALSE;
//если символ ещё и не цифра - строка - не число
break;
};
$i++;
};
if(!$wasexp) {
//если не было мантиссы - строка - не число
return FALSE;
} else {
return $isreal;
};
};
?>
function myisreal($str) {
global $numbers;
if((@$str[0]=='+') || (@$str=='-')) {
$i=1; //если первый символ - знак, пропускаем его
} else {
$i=0;
};
$isreal=TRUE;
$wasexp=FALSE;
if(!((in_array(@$str[$i],$numbers)&&(($str[$i+1]=='.')||($str[$i+1]==','))&&(in_array($str[$i+2],$numbers)))) {
return FALSE; //проверяем, что первые три символа - цифра, точка и цифра
};
$i=$i+3;
while(IsSet($str[$i])) {
if(strtolower($str[$i])=='e') {
//если попался разделитель числа и мантиссы
$wasexp=TRUE;
$str2=substr($str,$i+1,strlen($str)-$i);
$isreal=myisint($str2); //проверяем, что оставшаяся часть - целое число
break;
};
if(!in_array(@$str[$i],$numbers)) {
$isreal=FALSE;
//если символ ещё и не цифра - строка - не число
break;
};
$i++;
};
if(!$wasexp) {
//если не было мантиссы - строка - не число
return FALSE;
} else {
return $isreal;
};
};
?>
Функция для сведения всего этого вместе: myisnumeric - узнаёт, является ли строка числом хотя бы в одном из трёх представлений:
Код:
<?
function myisnumeric($str) {
return ((myisint($str)||(mydecreal($str)||(myisreal($str)));
//возвращаем TRUE, если хотя бы одна из трёх функций вернула TRUE
};
?>
function myisnumeric($str) {
return ((myisint($str)||(mydecreal($str)||(myisreal($str)));
//возвращаем TRUE, если хотя бы одна из трёх функций вернула TRUE
};
?>
Например:
if(preg_match("/^[-+]?[0-9]+$/", $text))
{
// все цифры
}
else
{
// ...
}
Цитата:
Originally posted by view
А не проще регулярным выражением?
Например:
if(preg_match("/^[-+]?[0-9]+$/", $text))
{
// все цифры
}
else
{
// ...
}
А не проще регулярным выражением?
Например:
if(preg_match("/^[-+]?[0-9]+$/", $text))
{
// все цифры
}
else
{
// ...
}
Насколько я вижу, эта функция проверяет строку только "на целость"...
Вообще=то функциям с посимвольной проверкой строки хочется доверять как-то больше, чем проверкой совпадения с шаблоном...
Цитата:
Originally posted by penartur
Насколько я вижу, эта функция проверяет строку только "на целость"...
Вообще=то функциям с посимвольной проверкой строки хочется доверять как-то больше, чем проверкой совпадения с шаблоном...
Насколько я вижу, эта функция проверяет строку только "на целость"...
Вообще=то функциям с посимвольной проверкой строки хочется доверять как-то больше, чем проверкой совпадения с шаблоном...
Сам то понял, что сказал? ;)
Если я правильно понял, "на целость" означает - только целые. Могу предложить шаблон для проверки и "на дробность" :) :
"/^[-+]?\d+(\.\d*)?$/"
Если немного пофантазировать, то можно и для экспоненциального представления придумать шаблон.