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.

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