regex funktioniert in php aber in js nicht
kyuu
- javascript
hallo,
habe folgenden regex zum prüfen einer url:
"http://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}(/\S*)?$"
in php eingebunden funktioniert er prima, aber bei der vorab prüfung per javascript leider nicht. und zwar wird das {2,4} und das \S ignoriert bzw fehlinterpretiert.
aber eigentlich gibt es doch da keine unterschiede oder habe ich etwas übersehen?
hoffe jemand kann mir helfen,
danke schonmal,
kyuu
Hi,
habe folgenden regex zum prüfen einer url:
"http://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}(/\S*)?$"
Der Doppelpunkt mu- nicht escaped werden.
Die {} werden auf http://de.selfhtml.org/javascript/objekte/regexp.htm nicht erwähnt. Ob das ein Fehler dieser Seite ist oder tatsächlich in den Javascript-Regex nicht möglich ist, weiß ich nicht.
Welchen Aspekt einer URL soll das eigentlich prüfen?
Der Ausdruck matcht auf viele nicht-Urls ("http://..de", "http://---.de"), matcht aber auf viele URLs nicht ("http://äöü.de", "http://bla.museum/")
cu,
Andreas
Hallo kyuu.
habe folgenden regex zum prüfen einer url:
"http://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}(/\S*)?$"
in php eingebunden funktioniert er prima, aber bei der vorab prüfung per javascript leider nicht. und zwar wird das {2,4} und das \S ignoriert bzw fehlinterpretiert.
Du solltest einmal einen Blick in deine Fehlerkonsole werfen. Dein tatsächlicher regulärer Ausdruck lautet in JavaScript wie folgt:
/http:/
Alles was danach kommt, sind ungültige Modifier. Du musst, mangels alternativer Delimiter, in JS die Slashes also maskieren:
/http:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}(\/\S*)?$/
^ ^^ ^
1 23 4
1 = Wie MudGuard schon sagte, muss der Doppelpunkt nicht maskiert werden
2 = Innerhalb von Zeichenklassen steht der Punkt wirklich für einen Punkt.
3 = Befindet sich das „-“ am Ende einer Zeichenklasse, muss es nicht maskiert werden
4 = Ebenfalls maskiert
Einen schönen Sonntag noch.
Gruß, Mathias
Lieber Mathias,
"http://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}(/\S*)?$"
[...] Dein tatsächlicher regulärer Ausdruck lautet in JavaScript wie folgt:/http:/
[...] Du musst, mangels alternativer Delimiter, in JS die Slashes also maskieren:
/http:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}(\/\S*)?$/
...oder aber den String selbst von Javascript zu einem RegExp-Objekt umwandeln lassen. Dann sind alle nötigen Maskierungen von vornherein enthalten.
Ich probier's mal ungetestet:
var muster = "http://[a-zA-Z0-9-.]+\.[a-zA-Z]{2,4}(/\S*)?$";
var modifier = "gi";
var suchmuster = new RegExp(muster, modifier);
var teststring = "http://..Dackelwackel...blah/meineseite.xml";
alert(teststring.match(suchmuster));
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix.
"http://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}(/\S*)?$"
[...] Dein tatsächlicher regulärer Ausdruck lautet in JavaScript wie folgt:/http:/
[...] Du musst, mangels alternativer Delimiter, in JS die Slashes also maskieren:
/http:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}(\/\S*)?$/
...oder aber den String selbst von Javascript zu einem RegExp-Objekt umwandeln lassen. Dann sind alle nötigen Maskierungen von vornherein enthalten.
Wobei die JS-Engine hierbei erst den String in ein RegExp-Objekt kompilieren muss, was definitiv weniger leistungsschonend ist, als ein RegExp-Literal zu verwenden.
Ich probier's mal ungetestet:
var muster = "http://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}(/\S*)?$";
var modifier = "gi";
var suchmuster = new RegExp(muster, modifier);
var teststring = "http://..Dackelwackel...blah/meineseite.xml";
alert(teststring.match(suchmuster));
Copy-und-Paste mit vorangestelltem „javascript:“ in meine Adressleiste bestätigt die Funktionstüchtigkeit.
Einen schönen Sonntag noch.
Gruß, Mathias
--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
debian/rules