Autor | Zpráva | ||
---|---|---|---|
Jont Profil |
#1 · Zasláno: 7. 11. 2008, 20:19:19
Ahoj, chtěl bych ve skriptu zkontrolovat, zda je správně zadaná url a tak jsem si našel na internetu tyto:
https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)? ^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w] {2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+= \w+)*)? Ale ani jeden nefunguje dobře. První bere adresu http://w.neco.cz , ale už ne http://neco.cz . Druhý nebere nic. Zkoušel jsem to pomocí tohoto kódu: $url= 'http://neco.cz'; $regv= 'https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?'; if (ereg($regv, $url)) echo 'vyhovuje.'; else echo 'nevyhovuje'; Tak bych se chtěl zeptat, jaký ten výraz používáte pro kontrolu url vy a ještě případně jak udělat funkci, která to bude dělat. Dík |
||
nightfish Profil |
#2 · Zasláno: 7. 11. 2008, 20:45:28
|
||
Jont Profil |
#3 · Zasláno: 7. 11. 2008, 22:47:11
No ten jsem taky zkoušel, ale taky to nefunguje, je chyba: REG_ERANGE ale ani http://www.neco.cz to nebere. Můžete mě prosím napsat celý ten kód? Vím, že je to lamský problém, ale mě to fakt nefunguje.
|
||
CZFilip Profil * |
#4 · Zasláno: 8. 11. 2008, 00:16:10
Zkus tenhle:
^http:\/\/[[:alnum:]]+([-_\.]?[[:alnum:]])*\.[[:alpha:]]{2,6}(\/{1}[-_ ~&=\?\.a-z0-9]*)*$ kód? public function regExpTest($regExp,$value){ return ereg($regExp,$value) ? true : false; } |
||
Jont Profil |
#5 · Zasláno: 8. 11. 2008, 00:53:25
Dík, už to funguje s tím posledním výrazem. Jenom by mě zajímalo, proč to nejde s těmi předchozími.
|
||
Jont Profil |
#6 · Zasláno: 9. 11. 2008, 19:59:30
vám ostatním třeba ten z regularnivyrazy.info funguje, jo?
|
||
BetaCam Profil |
#7 · Zasláno: 10. 11. 2008, 14:29:41
Jont
„No ten jsem taky zkoušel, ale taky to nefunguje, je chyba: REG_ERANGE ale ani http://www.neco.cz to nebere.“ No to je dost logické když to používáte jako POSIX, ale ten regulár PCRE. Jont vám ostatním třeba ten z regularnivyrazy.info funguje, jo? Budeš se divit, ale funguje. : <?php error_reporting(E_ALL|E_STRICT); $url = 'http://asdasdsd.com'; preg_match('$(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\ -]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]) \.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25 [0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5] |2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\ .)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[^/][a-zA-Z0-9\.\,\?\'\\ /\+&%\$#\=~_\-@]*)*$', $url, $match); var_dump($match); ?> Jediné co bylo do reguláru přidáno byl delimiter $ Doporučuji ti si zajít na Shrnutí syntaxe. Poté by ti mělo být jasné, že ten regulár nemůžeš cpát do ereg*(). Jinak rěkl bych, že ve většině případů sou na internetu uváděny reguláry typu PCRE. |
||
Časová prodleva: 1 rok
|
|||
RayPro Profil |
#8 · Zasláno: 26. 4. 2010, 16:52:53
CZFilip:
> Zkus tenhle: > > ^http:\/\/[[:alnum:]]+([-_\.]?[[:alnum:]])*\.[[:alpha:]]{2,6}(\/{1}[-_ ~&=\?\.a-z0-9]*)*$ Pro mojí potřebu, a možná nejen pro mojí, bych doplnil menší detail: ^http(s):\/\/[[:alnum:]]+([-_\.]?[[:alnum:]])*\.[[:alpha:]]{2,6}(\/{1}[-_ ~&=\?\.a-z0-9]*)*$ |
||
Časová prodleva: 13 let
|
0