Validare url con !eregi o preg_match?

Mi è venuto un dubbio, vedo che molti usano preg_match per validare una Reg, io uso !eregi e funziona lo stesso, allora che cambia?

if ($url){                              
if (!eregi("^((http(s)?:\/\/)|(www\\.))([^-_;:.,'*^+()=!|?<>£§$%&#èùòàé/][-.a-z0-9]+)(\.[a-z]{2,4}[/?]?)([/?]([-_;:.,'*^+()=!|?£§$%&#A-Za-z0-9/])*)?$",$url)){                                             
$errore .= "Inserire un' URL valido";
 }
}
inviato 8 anni fa
php
php
6
X 0 X

Le espressioni regolari eseguite con l'estensione "preg" sono mooooolto più performanti. Ed infatti PHP 6 non avrà più le istruzioni "ereg"

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Il punto è che funziona bene solo così:

if ($url){                              
if (!eregi("^((http(s)?:\/\/)|(www\\.))([a-z0-9][-.a-z0-9]+)(\.[a-z]{2,4}[/?]?)([/?]([-_~;:.,'*^+()=!|?£§$%&#A-Za-z0-9/])*)?$",$url)){                                             
$errore .= "Inserire un' URL valido";
 }
}

se metto !preg_match mi da sempre "Inserire un' URL valido" anche se è valido.

risposto 8 anni fa
php
php
6
X 0 X

non ho controllato la regex

ma

preg_match("/^((http(s)?:\/\/)|(www\\.))([a-z0-9][-.a-z0-9]+)(\.[a-z]{2,4}[/?]?)([/?]([-_~;:.,'*^+()=!|?£§$%&#38;#A-Za-z0-9/])*)?$/i")

dovrebbe andare

risposto 8 anni fa
Conroe
X 0 X

non ho controllato la regex

ma

preg_match("/^((http(s)?:\/\/)|(www\\.))([a-z0-9][-.a-z0-9]+)(\.[a-z]{2,4}[/?]?)([/?]([-_~;:.,'*^+()=!|?£§$%&#A-Za-z0-9/])*)?$/i")

dovrebbe andare

Non va:

Se metto così non fa passare niente anche se l'url è valido:

if (!preg_match("/^((http(s)?:\/\/)|(www\\.))([a-z0-9][-.a-z0-9]+)(\.[a-z]{2,4}[/?]?)([/?]([-_~;:.,'*^+()=!|?£§$%&#A-Za-z0-9/])*)?$/i",$url)){
risposto 8 anni fa
php
php
6
X 0 X

Non va perchè sbagliata questa regex:

/^((http(s)?:\/\/)|(www\\.))([a-z0-9][-.a-z0-9]+)(\.[a-z]{2,4}[/?]?)([/?]([-_~;:.,'*^+()=!|?£§$%&#38;#A-Za-z0-9/])*)?$/i

l'errore è in '[/?]' (che hai messo 2 volte) l'operatore '/' chiude la regex, dovresti fare l'escape come hai fatto precedentemente.

Ciao!

risposto 8 anni fa
Hroud
X 0 X

Non va perchè sbagliata questa regex:

/^((http(s)?:\/\/)|(www\\.))([a-z0-9][-.a-z0-9]+)(\.[a-z]{2,4}[/?]?)([/?]([-_~;:.,'*^+()=!|?£§$%&#A-Za-z0-9/])*)?$/i

l'errore è in '[/?]' (che hai messo 2 volte) l'operatore '/' chiude la regex, dovresti fare l'escape come hai fatto precedentemente.

Ciao!

Di che escape precedente parli?

risposto 8 anni fa
php
php
6
X 0 X

Se intendi questi qui ci vogliono perchè non sono nelle parentesi quadre perciò se alla barra obliqua voglio dargli un significato letterale gli devo mettere l'escape

^((http(s)?:\/\/)|(...

ma nel caso ..[/?]?)([/?].. non servono

risposto 8 anni fa
php
php
6
modificato 8 anni fa
X 0 X

Ho risolto in base a queste specifiche. http://it.wikipedia.org/wiki/Email

Per l'email:

if (!preg_match("/^([a-z0-9][_.a-z0-9]+[a-z0-9])[@][-.a-z0-9]+(\.[a-z]{2,4})$/",$email)){
...

Per l'url:

if (!preg_match("/^((http(s)?:\/\/)|(www\.))([a-z0-9][-.a-z0-9]+)((\.[a-z]{2,4})[?\/]?)([?\/][-_~;:.,'*^+()=!|?£§$%&amp;#A-Za-z0-9\/]*)?$/",$url)){
...
risposto 8 anni fa
php
php
6
modificato 8 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda