Autor Zpráva
Jont
Profil
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
http://www.regularnivyrazy.info/url.html
Jont
Profil
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 *
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
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
vám ostatním třeba ten z regularnivyrazy.info funguje, jo?
BetaCam
Profil
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.
RayPro
Profil
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]*)*$

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: