Jak Rozpoznać czy pole w formularzu ma liczbę całkowitą albo zmienno przecinkową

0

Mam taki problem problem niby prosty a tutaj się okazuje, że zwraca mi rózne wyniki
Jest sobie formularz i tam musi się znajdować liczba całkowita lub zmiennoprzecinkowa i teraz żeby to sprawdzić próbowałem różnych sposobów

np taki

funkcja(Input::get('pole'));

funkcja($pole) {
if ($pole != (float) $pole) return -1;

//drugi sposób
if ($pole !== (float) $pole) return -1;

//trzeci spobób
$sum = $pole + 1 - 1;
if ($sum !- $pole) return -1;
}

No i wszystkie zwracają mi błąd.

1

A czy próbowałeś skorzystać z is_int - http://php.net/manual/en/function.is-int.php oraz is_float http://php.net/manual/en/function.is-float.php ?

0

Daj trochę więcej kodu, napisz skąd się biorą zmienne poleitp.
Pokaż też, w jaki sposób używałeś podanych przeze mnie funkcji. Są one dedykowane do tego, co chcesz, więc prawdopodobnie coś źle zrobiłeś.

0
public function checkIfHow($price,$how) {
        //$tmp = (float) $price;
        //print $price;
        //$tmp2 = (int) $how;
        //var_dump($price);
        $a  ="aaa";
        $sum = $price + 1  -1;
        print $sum;
        if ( $sum != $price ) return -1;
        if (($price != "" and $price !== (float) $price) or ($how != "" and $how !== (int) $how)) {
            //return -1;
        }
        if (($price == "" xor $how == "")) {
            //return -2;
        }
        else {
            return 0;
        }
        
    }
    public function addProductAction() {
        if ( (Auth::check()) ) {
            $Drugs = new Drugs;
            //$aaa = "11aa";
            //if ($aaa !== (int) $aaa) print "dobrze";
            $bool = $Drugs->checkIfHow(Input::get("price"),Input::get("how"));
            if ($bool == -2) print "minus dwa";
            else if ($bool == -1) print "minus jeden";
        }
        
        
    }
2

Pokaż formularz... nie bardzo widzę kontekst
Przede wszystkim jeśli chcę mieć liczbę to dla inputa ustawiam type="number".
Po drugie jeśli chcesz sprawdzić czy wartość zmiennej jest numerem, spróbuj użyć funkcji is_numeric

2

Po pierwsze formatuj ten kod sensownie. Nie bierz tego do siebie, ale ten kod wygląda jak psu z gardła wyjęty. Raz stawiasz spację po nawiasie, a linijkę niżej nie.. raz if'y piszesz tak, raz inaczej. pobierz jakieś sensowne IDE, które ma autoformatowanie kodu, typu PHPStorm (jest darmowa wersja EAP, skrót ctrl + alt + l).

Po drugie, co to u diabła za nazwa funkcji checkIfHow - "sprawdźJeżeliJak"?

Po trzecie, co to za magiczne wartości: -1, -2, -666? Użyj stałych:

class VehicleType {
    public const CAR = 1;
    public const HELICOPTER = 2;
    public const PLANE = 3;
}

Po czwarte co to za jakieś używanie xor, and i or? Pisz Pan normalnie: ^, &&, ||.

Po piąte używaj typów:

public function checkIfHow(int $price, string $how): int

Po szóste formatuj if'y w jednolity sposób, czyli zawsze tak:

if ($foo === 10) {
    return 'coś';
}

nigdy tak:

if ($foo === 10) return 'coś';

I w końcu odpowiadając na Twoje pytanie, to prawdopodobnie masz input type text. Jeżeli tak, to zmienna przychodzi jako string, a is_int dla stringa (nawet jak to jest "10", czy "3.14") zwróci false, bo to string, a nie int. Rozwiązania:

$var = "10";
if (is_numeric($var)) {
    $var = (int) $var;
}

lub nawet lepsze użyj https://laravel.com/docs/5.7/validation jak chcesz walidować formularz.

0

public function checkIfHow(int $price, string $how): int

Ja je stosuje tylko tam gdzie trzeba.

0

Zrób odwrotnie. Nie stosuj ich tam, gdzie się nie da.

0

A nie lepiej użyć regex? Coś w stylu ^\d+(\.\d+)?$ ?

EDIT: W sumie nie doczytałem, że chodzi też o dokładność typu. Więc regex odpada, bo stringi przepuści.

1 użytkowników online, w tym zalogowanych: 0, gości: 1