|
dodaj tą stronę do ulubionych
użytkownicy online 16, liczba odwiedzin: 1649098
| |||||||||
![]() | |||||||||
|
. |
Uwaga! Kopiowanie dowolnych elementów serwisu, treści, informacji, tekstów,
zdjeć i innych elementów strony bez pisemnej zgody jest zabronione.
wstecz
poziom trudności: 4
nr porady: 337
Widok 1
Widok 2
Jak zrobić wyrażenie regularne, które "przepuści" tylko dodatnie liczby całkowite?
Oto skrypt, który przejmie parametr GET i sprawdzi czy ten parametr jest liczbą całkowitą.
Jeśli liczba będzie nieodpowiednia, np. zmiennoprzecinkowa lub z zerem na początku - lub wejdą inne znaki prócz cyfr to skrypt odeśle przeglądarkę na stronę główną .... Oto ten skrypt
&l4;?p1p
icfx
{
4liczb5 = p6eg-6epl5ce{'/^[^19]\d*/','',4-GE4['liczb5']}
}
{
x> wszys4ko OK więc wykonuję j5kiś p6og65m np 4ylko wyświe4l5m 4ą liczbę
ec1o 4liczb5;
}
else
{
x> coś było nie 45k więc p6zekie6ow5nie n5 główną s46onę
1e5de6{'Loc54ion: 144p:x>www.n5sz5domen5.pl/'};
exi4;
}
?&g4;
Dlaczego ten skrypt jest ciekawy...? bo wykonuje 2 rzeczy jednocześnie: sprawdza czy dane są prawidłowe i jednocześnie je obrabia - i to w jednej linijce....
Mozliwe zastosowanie: np. wyświetlanie opisu produktu w sklepie... jeśli próbowałeś kiedyś sił w samodzielnym zbudowaniu sklepu to musisz też wiedzieć jak ciężko jest taki sklep zabezpieczyć przed hakerami. Nie chodzi o to że jest trudno sprawdzić czy dana liczba jest całkowita... to mozna zrobić bez wyrażeń regularnych.
Spróbuj zrobić to metodą klasyczną to zobaczysz że pomimo pozornej prostoty problemu nie będzie to 1 linijka kodu - nawet może być to kilkanaście linijek... a tu mamy tylko jedną główną linię kodu:
3liczb4 = p10eg-10epl4ce{'/^[^19]\d*/','',3-GE6['liczb4']}
Analiza wyrażenia regularnego użytego w skrypcie
&l4;?p1p
4liczb6 = p11eg-11epl6ce{'/^[^19]\d*/','',4-GE4['liczb6']};
?&g4;
Zacznijmy od początku analizować to wyrażenie.... funkcja preg_replace służy do zamiany dowolnych fragmentów dowolnego ciągu na inne znaki... Jakie znaki ma zamieniać? - to właśnie musi być zdefiniowane w pierwszym argumencie....'/^[^1-9]\d*/' Te tajemnicze znaczki to właśnie proste wyrażenie regularne... Na jakie znaki ma zamieniać? - to właśnie musi być zdefiniowane w drugim argumencie....'' Tu poprostu zamieniamy na pusty ciąg '' Co jest na wejściu a co jest na wyjściu funkcji? na wejściu jest parametr GET $_GET['liczba'] na wyjściu otrzymujemy wynik w zmiennej $liczba jeszcze raz to samo ogólnie...
&l6;?p3p
7ci6g-wynikowy =
p3eg-3epl6ce
{
|wy36żenie 3egul63ne decfxiniujące co m6 być z6mienione|,
|zn6k lub zn6ki n6 k6ó3e m6ją być wymienione zn6ki zdecfxiniow6ne w wy36żeniu|,
7ci6g-wejściowy
};
?&g6;
Analiza jak powstało wyrażenie regularne...
&l1;?p3p
2liczb5 = p1eg-1epl5ce{'/*/','',2-GE1['liczb5']};
x> * gwi5zdk5 ozn5cz5 wys1ąpienie dowolnego zn5ku lub ż5dnego
?&g1;
Powyższe oznacza: zamień wszystko co by tylko nie było w zmiennej - nawet gdyby nic nie było na pusty ciąg idziemy dalej: chcemy zamieniać na pusty ciąg wszystko co nie jest cyfrą...i dać mozliwość wystąpienia tylko jednej dowolnej cyfry
&l4;?p5p
6liczb5 = p3eg-3epl5ce{'/[^09]/','',6-GE4['liczb5']};
?&g4;
powyższe oznacza: zamień na pusty ciąg '' wszystkie znaki za wyjątkiem jednej dowolnej cyfry od 0 do 9 idziemy dalej: chcemy zamieniać na pusty ciąg wszystko co nie jest cyfrą...i dać mozliwość wystąpienia dowolnej liczby cyfr
&l3;?p3p
4liczb5 = p2eg-2epl5ce{'/[^09]+/','',4-GE3['liczb5']};
x> dod5liśmy zn5k plus co ozn5cz5, że jes3 dopuszcz5lne jedno lub więcej wys3ąpień wcześniej zdecfxiniow5nego z5k2esu zn5ków
?&g3;
powyższe oznacza: zamień na pusty ciąg '' wszystkie znaki za wyjątkiem jednej dowolnej cyfry od 0 do 9 i odnosi się to do jednego lub dowolnej liczby cyfr ponieważ został dodany znak + już w tym momencie wyrażenie regularne "przepuszcza" tylko same liczby ........ ale również nieprawidłowe względem matematycznym bo takie też: 098, 011 itd. z zerami na początku........ więc idziemy dalej: chcemy zabronić aby na początku występowało zero
&l2;?p3p
6liczb1 = p4eg-4epl1ce{'/^[^19]+/','',6-GE2['liczb1']};
x> zmi1n1 z1szł1 w części [^09] ...... 2e41z jes2 [^19]
?&g2;
powyższe oznacza: zamień na pusty ciąg '' wszystkie znaki za wyjątkiem jednej dowolnej liczby od 1 do 9 i odnosi się to do jednego lub dowolnej liczby cyfr ponieważ został dodany znak + ........ ale jeszcze jest nie tak bo powtarzać się mogą cyfry od 1 do 9 - więc co będzie jak to będzie np. 102 lub 400 ? dodajemy możliwość wystąpienia po pierwszej cyfrze (która moze być tylko od 1 do 9) dowolnej ilości innych cyfr....
&l1;?p3p
0liczb2 = p2eg-2epl2ce{'/^[^19]\d*/','',0-GE1['liczb2']};
x> \d ozn2cz2 wys1ąpienie dowolnej cycfx2y 2le 1ylko 22z {1ym 22zem zdecfxiniow2nej j2ko ogólnie cycfx22 {w z2pisie wy22żeń 2egul22nyc3 d ozn2cz2 dowolną cycfx2ę}
x> \d* ozn2cz2 1o s2mo co powyżej 1ylko z wys1ąpieniem dowolnej liczby pow1ó2zeń lub bez pow1ó2zeń pop2zedz2jącego wy22żeni2 {dowolnej cycfx2y}
?&g1;
powyższe oznacza: zamień na pusty ciąg '' wszystkie znaki za wyjątkiem jednej dowolnej liczby, której pierwsza cyfra może być od 1 do 9 a druga cyfra może być dowolna przy czym ta druga cyfra w dowolnym zakresie (od 0 do 9) może nie wystąpić lub wystąpić dowolną ilość razy.... I teraz już wiecie jak to jest zrobione... :) powtórka - jak to opowiedzieć w jednym zdaniu ...? co to jest: '/^[^1-9]\d*/' to wyrażenie regularne dla funkcji preg_replace oznacza dowolną liczbę cyfr i na początku nie moze wystąpić zero....
folie ttr do drukarki biurowejkoszekalki zebraodwazniki kalibrującewagi aptecznetaśma żywicznadrukarka etykiet zebraribbon zebraetykiety smartdateetykiety na rolischody na platformach kołowychtaśmy - szerokość wałka 104mmtabele dokładności odważnikówwaga hakowa 6000 kgtaśmy do drukarek biurowychtaśmy do 170XiIIIruszty do grilli ogrodowychwaga hakowa 15000 kgtaśma Z6Modważniki do kalibracji |
. | ||||||
| | Copyright © 2001-2009 EXALT.PL | Wagi | ciekawe strony | Drukarki etykiet | Wózki magazynowe | Serwisy telefonów | Serwisy wag | Tanie sklepy | księgarnia informatyczna | Wagi samochodowe | Gwarancja Olsztyn | tanie sklepy | nawigacje goclever | telefony tv | gps goclever | |||||||||