Autor Zpráva
Tomasekkk
Profil *
Zdravím Vás, potřebuji do podmínky udělat ověření čísla, které může být max. 4 místné, nesmí zde být žádný jiný znak než číslo (tzn. žádné - + . / apod.), přes is_numeric mi to nejde, protože bere i desetinné číslo, jedná se o celá čísla. Lze to řešit nějak jednoduše?
panther
Profil
Tomasekkk:
is_int + strlen.
Tomasekkk
Profil *
Zvláštní, is_int() mi nejde, is_numeric ano (ale zase jdou i desetinná čísla) ... přemýšlel jsem také, zda-li by to nešlo přes eregi()
Tomasekkk
Profil *
nebo tedy preg_match, ale raději si nechám poradit.
panther
Profil
Tomasekkk:
jak se projevuje to, že to nejde?

Pozor, $var = "23" není integer, ale string (více v example #1 na odkázané stránce).
Tomasekkk
Profil *
aha, no to je to jasné, hodnotu přebírám přes

$cislo = addslashes($_POST["id"]);


a podmínka

if (!is_int($cislo)) { }


prostě propustí tak jako když by tato podmínka byla splněna, přitom přes POST jde jen číslo 5
pcmanik
Profil
skus intval, to ti oreze vsetko a necha len cele cisla
Tori
Profil
Tomasekkk:
Tak místo addslashes() filtrujte vstup pomocí intval, a pak stačí už jen kontrolovat délku.
edit: Pozdě.
Tomasekkk
Profil *
Ale to mi zase bude brát znaménka jako - + apod. :-(
pcmanik
Profil
Tak si pozri funkciu
 settype
Tomasekkk
Profil *
No spíš jsem si říkal, že se to dá dělat jednodušeji, ale jak vidím v podmínce bude pár dalších funkcí, tak si myslím, že asi nejlepší bude tedy preg_match ... Nešlo mi spíš o to dostat se k nějakému výsledku, ale spíš mě zajímalo jak by jste to řešili vy.
Tomasekkk
Profil *
Zatím jsem to vyřešil takto jak jsem měl na mysli ještě před tím než jsem psal tento dotaz a jak to používám - myslím si tedy, že takto u toho zůstanu a délku budu ověřovat pouze přes strlen

if (!preg_match( '/^\d*$/'  , $cislo)) {}
Tori
Profil
Tomasekkk:
„spíš mě zajímalo jak by jste to řešili vy.“
Asi bych to brala podle toho, co se má stát v případě záporného čísla. Určitě přefiltrovat vstup přes intval, a pak:
a) pokud budu striktní a záporné číslo = chyba, tak ověřit (if $x < 0)
b) pokud chci akceptovat i překlepy uživatele, tak funkcí abs převést vstup na kladné číslo
... a následuje kontrola délky.

pcmanik:
Tak si pozri funkciu settype
No ale ta taky nepřevede záporná čísla na kladná.

edit:
Tomasekkk: ↑ Aha, nepochopila jsem, že to je ověření vstupu - myslela jsem, že filtr. Potom můžete rovnou do reguláru přidat i počet číslic:
preg_match( '/^\d{1,4}$/', $cislo)
Tomasekkk
Profil *
Moc děkuji, o počtu číslic v regulátoru vím, právě proto jsem jen psal, zda-li má někdo něco jiného jak by toto řešil, já takové věci používám pár let a nesleduju kde vývoj PHP jde, proto jsem napsal ať se přiučím něco jiného ;o) Moc děkuju

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0