Pereiti prie turinio

[PHP] ereg pakeitimas i preg_match


Rekomenduojami pranešimai

filter_var($ip, FILTER_VALIDATE_IP);

 

Turėk omeny, kad tavo pavyzdys praleis nevalidžius IP (pvz. 345.567.789.666), taip pat nepraleis IPv6 IP (tiesa, net filter_var atveju tam reikia tam tikrų flagų).

berods preg_match greitesnis nei filter_var jei neklystu.

 

IP adresus matchinantis expressionas:

^(?:(?:25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)(?(?=\.?\d)\.)){4}$

 

O IPv6:

^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$

 

Ir abu viename:

^(((([1]?\d)?\d|2[0-4]\d|25[0-5])\.){3}(([1]?\d)?\d|2[0-4]\d|25[0-5]))|([\da-fA-F]{1,4}(\:[\da-fA-F]{1,4}){7})|(([\da-fA-F]{1,4}:){0,5}::([\da-fA-F]{1,4}:){0,5}[\da-fA-F]{1,4})$

 

Anot manęs turėtų būt geri.

 

Tokių dalykų pakuist reik http://regexlib.com/ kai prireikia, nereik pačiam burt ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

berods preg_match greitesnis nei filter_var jei neklystu.

 

IP adresus matchinantis expressionas:

^(?:(?:25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)(?(?=\.?\d)\.)){4}$

 

O IPv6:

^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$

 

Ir abu viename:

^(((([1]?\d)?\d|2[0-4]\d|25[0-5])\.){3}(([1]?\d)?\d|2[0-4]\d|25[0-5]))|([\da-fA-F]{1,4}(\:[\da-fA-F]{1,4}){7})|(([\da-fA-F]{1,4}:){0,5}::([\da-fA-F]{1,4}:){0,5}[\da-fA-F]{1,4})$

 

Anot manęs turėtų būt geri.

 

Tokių dalykų pakuist reik http://regexlib.com/ kai prireikia, nereik pačiam burt ;)

Priklauso nuo filtro ir regexo, sakyčiau. Tiesa tokiems dalykams, kaip email išvis neverta rašyti regexų, pvz. šitas vis dar nėra baigtas...

 

O šiaip regexai už gerai parašytą rankomis kodą yra retai greitesni.

<?
$t1 = microtime(true);
$ip4 = '123.123.123.123';
$ip6 = '2001:0db8:85a3:0042:1000:8a2e:0370:7334';

for ($i = 0; $i < 1e6; $i++) {
   filter_var($ip4, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6);
   filter_var($ip6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6);
}
echo microtime(true)-$t1;
?>

// 1.4 sek.

 

<?
$regex = "/^(((([1]?\d)?\d|2[0-4]\d|25[0-5])\.){3}(([1]?\d)?\d|2[0-4]\d|25[0-5]))|([\da-fA-F]{1,4}(\:[\da-fA-F]{1,4}){7})|(([\da-fA-F]{1,4}:){0,5}::([\da-fA-F]{1,4}:){0,5}[\da-fA-F]{1,4})$/";

$t1 = microtime(true);
$ip4 = '123.123.123.123';
$ip6 = '2001:0db8:85a3:0042:1000:8a2e:0370:7334';

for ($i = 0; $i < 1e6; $i++) {
   //filter_var($ip4, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6);
   //filter_var($ip6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6);
   preg_match($regex, $ip4);
   preg_match($regex, $ip6);
}
echo microtime(true)-$t1;

//5.0 sek.
?>

 

Aišku, turėtų prisidėti ir tai, kad čia turbūt regexas kompiliuojamas kiekvieną kartą. Bent jau aš nežinau PHP PREG funkcijos, kuri sukompiliuotų vienąkart, o tada su juo tikrintų, kaip yra kitose kalbose.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pagooglinau ta tema. Žodžiu,

 

http://pastebin.com/XSAZ6EsY

 

Šits laimi filter_var. ;)

 

BET tarkim naudojant emailui:

https://gist.github.com/uu59/2375573

 

laimi preg_match ;)

IMO emailui patikrini, ar turi @, ir būni ramus. Per daug sudėtinga tikrint iš tikrųjų validžiai. Jei tikrai nori įsitikint – bent kreipiesi į email serverį, ar siunti patvirtinimo laišką.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...