13 Stimmen

URL regex validierung

Ich habe das gemacht:

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

und habe es mit einem Validator überprüft, aber auf meiner Seite funktioniert es nicht:

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-Fehler");
    return false;
}

ich bekomme diesen Fehler

Webseitenfehlerdetails

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: Di, 30 Nov 2010 14:23:10 UTC

Nachricht: ')' in regulärem Ausdruck erwartet
Zeile: 781
Zeichen: 23
Code: 0
URI: http://*************************

0 Stimmen

Welchen Validierer hast du verwendet? War es spezifisch für JS? Beachten Sie, dass Regexes je nach Umgebung unterschiedlich sind.

0 Stimmen

Ich habe JS verwendet... ich weiß nicht, was falsch war

35voto

Nick Craver Punkte 609016

Sie müssen Ihre Sonderzeichen escapen (/ und das . nach www in diesem Fall) und das fehlende abschließende / hinzufügen, wie hier:

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-Fehler");
    return false;
}

2voto

Linus Kleen Punkte 32759

Ich werde posten, obwohl die Frage akzeptiert wurde.

Das Regex ist immer noch unvollständig.

http://www.-1-.de ist kein gültiger Domainname, würde aber Ihren Test bestehen.

Hier ist was ich benutze:

~^
(?: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

Deckt http(s), ftp(s) und .co.uk TLDs und ähnliches ab. Deckt auch Subdomains ab, die 1 Zeichen lang sein können (m.example.com für mobile Versionen von Webseiten), aber nicht m-.example.com erlauben.

Sicherlich könnte jemand einwenden, dass die Vollständigkeit des Regex fragwürdig ist, da .pro TLDs mindestens 4 Zeichen als Domainnamen erfordern. ;-)

Außerdem werden IDN-Domänennamen meinen Regex nur nach der Konvertierung (d.h. im "xn--" Format) bestehen.

1voto

Roger Punkte 7496

Nur für den Fall, dass Sie wissen möchten, ob die URL tatsächlich existiert:

function url_exist($url){//Wenn die URL existiert
    $c=curl_init();
    curl_setopt($c,CURLOPT_URL,$url);
    curl_setopt($c,CURLOPT_HEADER,1);//Hol den Header
    curl_setopt($c,CURLOPT_NOBODY,1);//und hol *nur* den Header
    curl_setopt($c,CURLOPT_RETURNTRANSFER,1);//Hole die Antwort als Zeichenfolge von curl_exec() anstatt sie auszugeben
    curl_setopt($c,CURLOPT_FRESH_CONNECT,1);//Verwende keine zwischengespeicherte Version der URL
    if(!curl_exec($c)){
        //echo $url.' existiert nicht';
        return false;
    }else{
        //echo $url.' existiert';
        return true;
    }
    //$httpcode=curl_getinfo($c,CURLINFO_HTTP_CODE);
    //return ($httpcode<400);
}

0voto

Toto Punkte 85935

Wie Nick gesagt hat, musst du \ und . escapen, es sei denn, du verwendest einen anderen Trenner, dann wird dein Regex:

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

Aber beachte, dass dein Regex URLs wie folgt matchen wird:

http://....aa.

0voto

Aamir Punkte 2005

Nach langen Recherchen habe ich diesen regulären Ausdruck erstellt. Ich hoffe, er wird auch anderen helfen.......

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X