Autor Zpráva
JSvabik
Profil
Zdravím všechny PHP programátory :)

Mám problém a už je toho na mě moc ...

Potřebuji pomocí funkce eregi() zjistit, zda zadaný řetězec obsahuje nebo naopak neobsahuje zadané znaky. Jde o uživatelské jméno, které může obsahovat pouze znaky [a-Z][0-9], tečku a pomlčku.

Předem děkuji za všechny odpovědi, nepochopil jsem totiž, jak znaky do funkce eregi() zapsat ...
Borius
Profil
JSvabik:
Funkce ‘eregi’ již není v novějších pětkových verzích PHP podporována, proto je lépe použít funkci ‘preg_match’:
if (preg_match('/^[a-zA-Z0-9\.\-]+$/',$username)){…}
Případně určit i minimální a maximální délku jména:
if (preg_match('/^[a-zA-Z0-9\.\-]{3,24}$/',$username)){…}
Případně je možné zakomponovat i další podmínky, např.: začít vždy písmenem:
if (preg_match('/^[a-zA-Z][a-zA-Z0-9\.\-]{2,23}$/',$username)){…}
Pokud by bylo možné použít i podtržítko, pak by šlo výraz ‘[a-zA-Z0-9_]’ zjednodušit na pouhé ‘\w’
JSvabik
Profil
Ano, na podtržítko jsem zapomněl, děkuji za odpověď, zkusím s tím něco udělat :)
Ale při ověřování e-mailu mi eregi() bez problému funguje ...
Borius
Profil
JSvabik:
Eregi ve starších verzích PHP fungovat bude. Ale jakmile přejdeš na PHP verzi 5.3 nebo vyšší, vyhodí to chybu „…deprecated…“ a příkaz nezpracuje. Pokud je mi známo, většina současných webhostingů už obvykle 5.3 používají.
Přesto, kdybys trval na eregi, bylo by to
if (eregi('^[\w]+$',$username)) {…}
Čili vpodstatě totéž, funkce má stejnou syntaxi, liší se jen způsobem zavedení regulárního výrazu (nepoužívá '//', ale jen '').
JSvabik
Profil
Aha - jsem na WEDOSu a mám PHP 5.4, ale i přesto eregi() funguje ...

Už jsem si předělal trochu to Tvé preg_match() a je to funkční :)

Takže ještě jednou díky ...
Rfilip
Profil
eregi zatím funguje ale máš vypnuté zobrazování chyb takže nevidíš hlášku "Deprecated: Function eregi() is deprecated in...", v budoucích verzích php bude tato funkce odstraněna
JSvabik
Profil
Zobrazování chyb mám všude zapnuté


Ale, ok, pomůžete mi tedy, prosím, ještě upravit toto:

function verify_valid_email($emailtocheck) 
  { 
    $eregicheck = "^([-!#\$%&'*+./0-9=?A-Z^_`a-z{|}~])+@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~]+\\.)+[a-zA-Z]{2,4}\$"; 
    return eregi($eregicheck, $emailtocheck); 
  }

na preg_match()?

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: