[JavaScript] Reguläre Ausdrücke

Zweipunktnull

Commander
Registriert
Dez. 2004
Beiträge
2.546
Hallo!

Ich hab ein Problem mit einem regulären Ausdruck, der nicht ganz das macht, was er soll. :)
Das - für mich - merkwürdige ist nur, dass ich diesen Regex schon lange Zeit in PHP Skripten benutze, wo er perfekt funktioniert, aber wenn ich ihn 1:1 nach JavaScript portiere, macht er ein kleines Problem.

Es geht um die Validation von E-Mail-Adressen.
Erstmal der Code:

PHP:
$email_pattern   = "#^.+@.+\.[a-zA-Z]{2,6}$#";

[...]

elseif (preg_match($email_pattern, $email) == 0)
{
    $error_message[] = "Ihre E-Mail-Adresse ist ungültig.";
}
HTML:
var email_pattern = '^.+@.+\.[a-zA-Z]{2,6}$';

[...]

else if (!email.match(email_pattern))
{
    error_message += 'Ihre E-Mail-Adresse ist ungültig.\n';
}

In PHP, alles bestens. Der Fehler bei JS: Eigentlich funktioniert dort auch alles - mit einer Ausnahme: deine E-Mail-Adresse wie abc@abc.abcdefghijklm wäre auch gültig. Dürfte ja aber eigentlich nicht, weil nach dem letzten Punkt nur 2-6 zeichen kommen dürfen. PHP macht es richtig. Wieso hat JS kein bock?

LG

Edit: Ach so, ja, also $email bzw. in JS nur email enthält die email adresse, dürfte aber klar sein...
 
Zuletzt bearbeitet: (was verändert, was denn sonst.. :rolleyes)
Hallo Computer Freak,

unabhängig von Deinem Problem ist der von Dir verwendete RegExp nicht gerade ideal zur Prüfung einer Email-Adresse.

Dieser hier stammt aus dem PHP-Manual:
Code:
/^[-_a-z0-9]+(\.[-_a-z0-9]+)*@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]{2,6}$/i

Versuch mal diesen Ausdruck, der sollte auch unter Javascript vernünftig funktionieren, ich hatte bisher jedenfalls keine Probleme.


Ciao
 
Ist der Regex ausm PHP Manual nicht eher unideal?
Soweit ich das sehe, erlaubt er keine sonderzeichen in der url nach dem at. das ist nun ja aber möglich... kann aber auch nur sein, dass ich den regex nicht ganz checke...
 
Hallo Computer Freak,

über IDNs habe ich bisher noch gar nicht nachgedacht. Aber ich habe mich mal schlau gemacht und bin wieder im PHP-Manual sowie der RFC 3986 fündig geworden.

Dort ist ein regulärer Ausdruck zur Prüfung von URLs beschrieben. Diesen ein wenig manipuliert kommt man zu folgendem RegExp für Email-Adressen.

Code:
/^[-_a-z0-9]+(\.[-_a-z0-9]+)*([+%][-_a-z0-9]+)*@[^\.\\/?#]+(\.[^\.\\/?#]+)*\.[a-z]{2,6}$/i

So ich hoffe, dieser Ausdruck hilft Dir jetzt wirklich weiter.

Anmerkung:
Mit diesem RegExp sind auch E-Mails in folgender Form möglich:
David at 03-Feb-2007 03:36 in PHP-Manual#preg_match schrieb:
The regex a couple of notes below this one for checking email addresses that uses eregi will fail for e-mail addresses of the forms:

david+php@risner.org
david%php@risner.org

These are both allowed according to the RFC's and are used. For example, the + is often used to force sorting to a particular folder.

Ciao
 
Falls es jemanden interessiert, ich habe jetzt auch mein ursprüngliches Problem gelöst mit folgendem Code:

HTML:
var email_pattern = /^.+@.+\.[a-z]{2,6}$/i;

[...]

else if (!email_pattern.test(email))
{
    error_message += 'Ihre E-Mail-Adresse ist ungültig.\n';
}

Ich war mal wieder bei sonsteiner Sprache, auf jedenfall nicht bei javascript. Hatte das emailmuster ja erst als String verpackt und nicht als regex. tja, aber wer merkt schon sowas direkt, wenn man in anderen sprachen den regex immer in nen string packen muss? :)
 
Das ist (eigentlich) egal, da Methoden, die reguläre Ausdrücke erwarten, sowohl Instanzen der Klasse RegExp als auch andere Instanzen verarbeiten können. Letztere werden durch das Ergebnis des Ausdrucks new RegExp(parameter) substituiert, so daß bspw.
Code:
string.match('foo')
und
Code:
string.match(/foo/)
zum gleichen Resultat führen.

greetings, Keita
 
Zurück
Oben