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 7 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 7 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 7 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 7 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 7 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 7 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 7 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 7 anni fa
php
php
6
modificato 7 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 7 anni fa
php
php
6
modificato 7 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda