2010-11-30 20 views
7

i hecho de que:URL de validación de expresiones regulares

/^(http[s]?://){0,1}(www.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1} 

y comprobó con un validador, pero en mi página no está funcionando:

var re = /^(http[s]?://){0,1}(www.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}; 
if (!re.test(url)) { 
    alert("url error"); 
    return false; 
} 

consigo este error

Webpage error details 

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E) 
Timestamp: Tue, 30 Nov 2010 14:23:10 UTC 


Message: Expected ')' in regular expression 
Line: 781 
Char: 23 
Code: 0 
URI: http://************************* 
+0

¿Qué validador usaste? ¿Era específico de JS? Tenga en cuenta que las expresiones regulares son diferentes según el entorno. –

+0

he usado js one ... no sé lo que estaba mal –

Respuesta

18

Tienes que escapar de tus caracteres especiales (/ y . después de www en este caso) y att la falta de salida /, así:

var re = /^(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/; 
if (!re.test(url)) { 
    alert("url error"); 
    return false; 
} 
+0

¡Cómo me lo perdí! :-) –

+0

¿Qué pasa con 'http: // localhost: 8000/memcache? Message = Caché + enrojecimiento% 2C + all + keys + dropped.'? –

+0

No valida http://81.201.51.112:50505/abc/xy.xml – Gogol

0

Como se dijo Nick que tiene que escapar \ y . a menos que estés utilizando otro delimitor por lo que su expresión regular se convertirá en:

var re = '~(https?)://)?(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,5}\.?~'; 

Pero tenga en cuenta que su expresión regular coincidirá con la url como:

http://....aa. 
1

Voy a publicar, aunque la pregunta ha sido aceptada.

Esa expresión regular aún está incompleta.

http://www.-1-.de no es un nombre de dominio válido pero pasaría su prueba.

Esto es lo que yo uso:

~^ 
(?:ht|f)tps?:// 

(?:[a-z0-9] (?:[a-z0-9-]*[a-z0-9])?  \.)* 

(?:[a-z0-9][a-z0-9-]{0,62}[a-z0-9]) 
(?:\.[a-z]{2,5}){1,2} 

$~ix 

Cubiertas http (s), ftp (s) y .es dominios de primer nivel y similares. También cubre subdominios que pueden tener 1 carácter de longitud (m.example.com para versiones móviles de páginas web) pero no permitirá m-.example.com.

Seguramente algunos podrían objetar en cuanto a la integridad de la expresión regular, ya que .pro TLD requieren al menos 4 caracteres como nombre de dominio. ;-)

También los nombres de dominio IDN solo pasarán mi expresión regular después de la conversión (es decir, en el formato "xn--").

+0

¿cómo lo usaría? – user3808307

0

En caso de que quieren saber si realmente existe la url:

function url_exist($url){//se passar a URL existe 
    $c=curl_init(); 
    curl_setopt($c,CURLOPT_URL,$url); 
    curl_setopt($c,CURLOPT_HEADER,1);//get the header 
    curl_setopt($c,CURLOPT_NOBODY,1);//and *only* get the header 
    curl_setopt($c,CURLOPT_RETURNTRANSFER,1);//get the response as a string from curl_exec(), rather than echoing it 
    curl_setopt($c,CURLOPT_FRESH_CONNECT,1);//don't use a cached version of the url 
    if(!curl_exec($c)){ 
     //echo $url.' inexists'; 
     return false; 
    }else{ 
     //echo $url.' exists'; 
     return true; 
    } 
    //$httpcode=curl_getinfo($c,CURLINFO_HTTP_CODE); 
    //return ($httpcode<400); 
} 
0

Después de una larga investigación que construir esta expresión reg. Espero que ayude a otros también .......

url = 'https://google.co.in'; 
    var re = /[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/; 
    if (!re.test(url)) { 
    alert("url error"); 
    return false; 
}else{ 
alert('success') 
} 
Cuestiones relacionadas