Stringlänge mit ReGex einschränken
Gunnar
- javascript
Hallo,
ich bin dabei den lokalen Teil einer e-Mail Adresse via ReGex zu prüfen. Laut Regel darf dieser ja nur maximal 64 Zeichen lang und muss mindestens aus einem Zeichen bestehen.
Ich erlaube die Zeichen . - und _, die dürfen nur zwischen a-z und 0-9 vorkommen, und dürfen nicht zweimal hintereinander vorkommen.
a:
Gerade noch habe ich im Internet gelesen, dass auch die Zeichen & und = usw in dem lokalen Teil erlaubt sind was ich noch nie gesehen habe. Auch wurde geschrieben, dass nur nicht erlaubt ist zwei Punkte hintereinander zu schreiben, bei den anderen Sonderzeichen das aber egal ist. Die Frage ist, sollte ich das auch noch zulassen und auch die anderen Sonderzeichen mit aufnehmen? Mir ist das auf jeden Fall neu, aber ich bin ja nicht abgeneigt dazuzulernen.
b:
Das Sonderzeichen + soll sogar noch eine besondere Bedeutung haben, welche hat dieses?
c:
Aber nun zu meinem ursprünglichen Problem, folgende ReGex, die ich entworfen habe (Ohne Leerzeichen, nur zur verdeutlichung):
^( ([a-z0-9])+ ([-_.]{1}([a-z0-9])+)* ){1,64}$
Ist bisher ja nur zum testen ohne @ usw. Es funktioniert bisher auch wie gewünscht, nur kann ich mehr als 64 Zeichen für den Ausdruck verwenden, ohne dass er mir false zurück gibt. Ich habe mit http://www.homepage-kosten.de/regexchecker.php getestet.
Vielen Dank,
Gunnar
Tach!
ich bin dabei den lokalen Teil einer e-Mail Adresse via ReGex zu prüfen. Laut Regel darf dieser ja nur maximal 64 Zeichen lang und muss mindestens aus einem Zeichen bestehen.
Reulär Gexpression? Wenn schon dann RegEx oder RegExp. Zudem ist es nicht möglich, Namen und Adressen (E-Mail und Anschriften) mit Mustern auf Validität im Sinne einer Nutzbarkeit zu prüfen. Selbst syntaktisch korrekte Werte können falsch sein. Es ist vergebliche Liebesmüh, sich da anzustrengen.
^( ([a-z0-9])+ ([-_.]{1}([a-z0-9])+)* ){1,64}$
Ist bisher ja nur zum testen ohne @ usw. Es funktioniert bisher auch wie gewünscht, nur kann ich mehr als 64 Zeichen für den Ausdruck verwenden, ohne dass er mir false zurück gibt.
{x,y} gibt nicht die Anzahl der Zeichen an, sondern wie oft der Ausdruck vorkommen kann. Selbst wenn man die vier Leerzeichen vorn und hinten als nicht existent betrachtet, gestattet der erste Teilausdruck ja schon beiliebig viele Vorkommen. Und "beliebig viele" mal 64 ergibt ...
dedlfix.
Tach!
Auch Hallo :)
Reulär Gexpression? Wenn schon dann RegEx oder RegExp.
Jetzt hast du ihn verschreckt ^^
Zudem ist es nicht möglich, Namen und Adressen (E-Mail und Anschriften) mit Mustern auf Validität im Sinne einer Nutzbarkeit zu prüfen. Selbst syntaktisch korrekte Werte können falsch sein. Es ist vergebliche Liebesmüh, sich da anzustrengen.
Das ist allerdings richtig. Aber Du kannst die Werte soweit prüfen, als das ausversehen vom Anwender eingefügte Zeichen (Verschreiber) abgefangen werden könnten. Ich denke, das ist der hauptsächliche Zweck bei der Formularprüfung via Javascript, denn wir wissen, dass wenn es ausgeschaltet ist, sowieso nichts bringen würde.
In Verbindung mit PHP (checkdnsrr()) bekommst du aber die Möglichkeit wenigstens zu prüfen, ob eine Domain existiert (MX-Record & A-Record prüfen) - wer eine e-Mail abfragt bei dem kann ich ja davon (vll.) ausgehen er benutzt es. Spam kann man nicht vermeiden, aber man kann ihn zumindest in einem gewissen Rahmen einschränken. Aber allein wegen erstem Argument dem Benutzer unter die Arme zu greifen, finde ich es erfreulich so eine Hilfe anzubieten und in Vebindung damit, Traffic zu sparen mag er einigen heutzutage noch so unbedeutend vorkommen. :)
{x,y} gibt nicht die Anzahl der Zeichen an, sondern wie oft der Ausdruck vorkommen kann. Selbst wenn man die vier Leerzeichen vorn und hinten als nicht existent betrachtet, gestattet der erste Teilausdruck ja schon beiliebig viele Vorkommen. Und "beliebig viele" mal 64 ergibt ...
nicht ..., sondern unendlich dedlfix :o)
Problem ist lösbar, wenn du ab dem @ trennst und prüfst ob links davon der String nicht über 64 Zeichen kommt und der rechte nicht über seine 190(?).
Frohe Weihnachten!
{x,y} gibt nicht die Anzahl der Zeichen an, sondern wie oft der Ausdruck vorkommen kann. Selbst wenn man die vier Leerzeichen vorn und hinten als nicht existent betrachtet, gestattet der erste Teilausdruck ja schon beiliebig viele Vorkommen. Und "beliebig viele" mal 64 ergibt ...
nicht ..., sondern unendlich dedlfix :o)
eigentlich sogar das 64fache von unendlich...
scnr
Kalk
[latex]Mae govannen![/latex]
Zudem ist es nicht möglich, Namen und Adressen (E-Mail und Anschriften) mit Mustern auf Validität im Sinne einer Nutzbarkeit zu prüfen. Selbst syntaktisch korrekte Werte können falsch sein. Es ist vergebliche Liebesmüh, sich da anzustrengen.
Das ist allerdings richtig. Aber Du kannst die Werte soweit prüfen, als das ausversehen vom Anwender eingefügte Zeichen (Verschreiber) abgefangen werden könnten.
Man kann nicht sicher wissen, ob es ein Verschreiber war. Zumindest im lokalen Teil einer Mail-Adresse ist so vieles erlaubt, daß ein Validitäts-Check komplett ausfällt. Im Domain-Teil kann man eigentlich auch nur Zeichen ausschließen, die für Mail-Adressen einen Sonderstatus haben oder Steuerzeichen etc. Insgesamt wird es zu kompliziert, weil die Wahrscheinlichkeit, gültige Adressen zu blocken zu groß wird. Rein theoretisch sollte ein _großzügiger_ Service auch Dinge wie
"Max und Maxine Mustermann" max+maxine@example.org
durchlassen wollen.
In Verbindung mit PHP (checkdnsrr()) bekommst du aber die Möglichkeit wenigstens zu prüfen, ob eine Domain existiert
Nein. Es kann sein, daß die Domain oder der DNS-Service genau zu dem Zeitpunkt ausgefallen ist | im Wartunsgsmodus ist, in dem der Nutzer ein Formular abschickt -> eine komplett valide Mail-Adresse wird abgelehnt und der Nutzer weiß üblicherweise nicht weshalb und vor allem nicht, was er nun tun soll, denn er _hat_ ja seine gültige Adresse eingegeben.
Problem ist lösbar, wenn du ab dem @ trennst und prüfst ob links davon der String nicht über 64 Zeichen kommt und der rechte nicht über seine 190(?).
alternativ auch durch Auswertung der Rückgabe von [mb_]strpos($email, '@')
und Ähnliches.
Stur lächeln und winken, Männer!
Kai
Man kann nicht sicher wissen, ob es ein Verschreiber war. Zumindest im lokalen Teil einer Mail-Adresse ist so vieles erlaubt, daß ein Validitäts-Check komplett ausfällt.
Natürlich nicht. Aber das weiß der der sich verschreibt ja nicht unbedingt. :) Einen Validitätscheck würde ich daher dennoch empfehlen, dass zumindest die Syntax des lokalen Teils stimmt d.H. kein "Doppel"punkt oder Sonderzeichen am Anfang bzw. am Ende vor dem @. Auch wenn sonst "alles" durchgeht, übt man bisschen mit der Sache - es bringt auf jeden Fall niemanden um.
Es kann sein, daß die Domain oder der DNS-Service genau zu dem Zeitpunkt ausgefallen ist | im Wartunsgsmodus ist, in dem der Nutzer ein Formular abschickt -> eine komplett valide Mail-Adresse wird abgelehnt und der Nutzer weiß üblicherweise nicht weshalb und vor allem nicht, was er nun tun soll, denn er _hat_ ja seine gültige Adresse eingegeben.
Das wäre etwas, das man durchaus noch bedenken sollte und ist ein guter Einwand - Eine Lösung wäre mit einem Hinweis darauf gegeben. Ob das nun ein Nutzer ist der schnell die Geduld verliert, da muss man sich dann eben entscheiden worauf man hinaus möchte und wofür dieser DNS Check letztendlich existiert.
Stur lächeln und winken, Männer!
Kai
Haben wir was verbrochen oder müssen wir etwas verstecken Skipper? ;)
Schönen Abend!
Tach!
Einen Validitätscheck würde ich daher dennoch empfehlen, dass zumindest die Syntax des lokalen Teils stimmt d.H. kein "Doppel"punkt oder Sonderzeichen am Anfang bzw. am Ende vor dem @. Auch wenn sonst "alles" durchgeht, übt man bisschen mit der Sache - es bringt auf jeden Fall niemanden um.
Es bleibt sinnlos. Du hast Aufwand für ein sehr komplexes Muster, das nur eine verschwindend geringe Anzahl an Vertippern abfängt. Die weitaus meisten Vertipper dürften Buchstabenvertauschungen sein. Denen kommst du damit nicht auf die Schliche.
dedlfix.
Du hast Aufwand für ein sehr komplexes Muster
Ob jetzt eine Arbeit von knapp 5 Minuten wirklich so komplex ist, mag ich bezweifeln, aber das ist am Schluss euer Eindruck ob es euch zu schwer ist - Es kommt halt darauf an wer die Syntax beherrscht und auch einsetzen kann und wer nicht.
Letztendlich würde ich aber dabei bleiben, weil es für mich kein Aufwand ist und ich es persönlich wie auch viele andere es würden, nicht als sinnlos erachte - sei es auch nur so gering. Mag es nur eine Spielerei sein, so findet man in ihr etwas Spaß - Für mich Spaß und eine Übung.
Ich kenne übrigends sehr viele Dinge die sinnlos sind wie z.B "eine Geldspende in die dritte Welt" oder "den Weltfrieden zu wollen". Die Antwort mag unerhört klingen, doch manche Menschen stehen dennoch für diese Dinge ein um die Welt ein kleines bisschen besser zu machen. Warum sollte es hier anderes sein für Menschen, die sich danach wohl fühlen.
Einen schönen Weltuntergang wünsch ich euch heute :-)
Rowland
Hi,
Ich erlaube die Zeichen . - und _, die dürfen nur zwischen a-z und 0-9 vorkommen, und dürfen nicht zweimal hintereinander vorkommen.
Warum willst Du diese Einschränkung machen?
Der Punkt ist besonders. Aber - und _ unterscheiden sich in nichts von a-z, was die Verwendbarkeit im LocalPart betrifft.
_._._@example.org wäre eine korrekte Adresse.
Oder auch |||.---.|||@example.org
a:
Gerade noch habe ich im Internet gelesen, dass auch die Zeichen & und = usw in dem lokalen Teil erlaubt sind was ich noch nie gesehen habe. Auch wurde geschrieben, dass nur nicht erlaubt ist zwei Punkte hintereinander zu schreiben, bei den anderen Sonderzeichen das aber egal ist. Die Frage ist, sollte ich das auch noch zulassen und auch die anderen Sonderzeichen mit aufnehmen? Mir ist das auf jeden Fall neu, aber ich bin ja nicht abgeneigt dazuzulernen.
Zumindest mehrere - (2 bis 3) habe ich schon oft gesehen (weil's real existierende Adressen sind, die leider von fehlerhaften Schnittstellen abgelehnt werden).
b:
Das Sonderzeichen + soll sogar noch eine besondere Bedeutung haben, welche hat dieses?
Es hat keine.
Die relevanten Regeln aus RFC 5322 (die Syntax der
Syntaxbeschreibung ist in RFC 5234 erläutert) - von verschiedenen
Stellen zusammenkopiert (sind in den Vorgängerversionen seit RFC 822 im wesentlichen unverändert):
addr-spec = local-part "@" domain
local-part = dot-atom / quoted-string / obs-local-part
Meist interessiert hier nur das dot-atom aus dem local-part, also weiter
damit:
dot-atom = [CFWS] dot-atom-text [CFWS]
Die Varianten mit CFWS sind auch irrelevant, White-Space im local-part
erlauben wir hier mal nicht.
dot-atom-text = 1*atext *("." 1*atext)
atext = ALPHA / DIGIT / ; Printable US-ASCII
"!" / "#" / ; characters not including
"$" / "%" / ; specials. Used for atoms.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
ALPHA sind die Buchstaben a bis z, DIGIT die Ziffern 0 bis 9
Wie man sieht, kann an allen Stellen, an denen ein Buchstabe oder eine Ziffer stehen darf, auch ein + oder ein - oder ein _ stehen.
Der Punkt ist aber in der Tat anders: er kann weder am Anfang noch am Ende des Localpart stehen (da davor/danach 1*atext kommen muß). Und mehrere Punkte können auch nicht nacheinander kommen.
cu,
Andreas
@@MudGuard:
nuqneH
Die relevanten Regeln aus RFC 5322
RFC 5322 ist irrelevant, wenn es um Nutzereingaben von E-Mail-Adressen geht. Die Umwandlung in Punycode ist dem Nutzer schnurzpiepegal. Für den Nutzer ist auch иван@россия.рф eine gültige E-Mail-Adresse.
Das einzige, was man prüfen könnte, ist die Exitenz von mindestens einem @. Wenn überhaupt. https://forum.selfhtml.org/?t=212032&m=1447901 ff.
Qapla'
[latex]Mae govannen![/latex]
Das einzige, was man prüfen könnte, ist die Exitenz von mindestens einem @. Wenn überhaupt. http://forum.de.selfhtml.org/my/?t=212032&m=1447901 ff.
Warum »mindestens einem« und nicht »genau einem«?
Üblicherweise sind multiple Auftreten von »@« ein Hinweis, daß ein Spammer eine Ladung Adressen abkippt.
In _Internet_-Formularen teste ich auf vier Kriterien:
- genau _ein_ Zeichen »@«
- kein Komma
- hinter dem »@« mindestens ein ».«, aber nicht direkt hinter dem »@«
- hinter dem ».« mindestens ein beliebiges Zeichen außer ».«
Stur lächeln und winken, Männer!
Kai
@@Kai345:
nuqneH
Warum »mindestens einem« und nicht »genau einem«?
IIRC ist "foo@bar"@example.net eine gültige E-Mail-Adresse.
- hinter dem »@« mindestens ein ».«, aber nicht direkt hinter dem »@«
https://forum.selfhtml.org/?t=212032&m=1447901 **ff.**
Qapla'
[latex]Mae govannen![/latex]
Warum »mindestens einem« und nicht »genau einem«?
IIRC ist "foo@bar"@example.net eine gültige E-Mail-Adresse.
Hmpf. Klar doch, warum sollte man es auch einfach machen und @ im Lokalteil ausschließen. :( Ist ja so gebräüchlich.
- hinter dem »@« mindestens ein ».«, aber nicht direkt hinter dem »@«
Diese RegExp läßt
foo@...
durch. Sollte das nicht besser bspw.
.+@[^.]+(\.[^.]+)+
(oder so ähnlich, hab das nur schnell hingebastelt) sein?
Stur lächeln und winken, Männer!
Kai
@@Kai345:
nuqneH
.+@[^.]+(\.[^.]+)+
Anstelle des letzten + ein * und der Ausdruck lässt auch das von Dem Martin angeführte root@localhost durch.
Qapla'
[latex]Mae govannen![/latex]
.+@[^.]+(\.[^.]+)+
Anstelle des letzten + ein * und der Ausdruck lässt auch das von Dem Martin angeführte root@localhost durch.
Ja. Dann „geht“ auch user@[IPv6:2001:db8:1ff::a0b:dbd0]
Stur lächeln und winken, Männer!
Kai
@@Kai345:
nuqneH
IIRC ist "foo@bar"@example.net eine gültige E-Mail-Adresse.
Grad zufällig auf die Quelle gestoßen (auf der Suche für einen anderen Thread).
Hmpf. Klar doch, warum sollte man es auch einfach machen und @ im Lokalteil ausschließen. :( Ist ja so gebräüchlich.
Gebräüchlich oder nicht, das ist hier nicht die Frage.
Qapla'
Hi,
RFC 5322 ist irrelevant, wenn es um Nutzereingaben von E-Mail-Adressen geht. Die Umwandlung in Punycode ist dem Nutzer schnurzpiepegal. Für den Nutzer ist auch иван@россия.рф eine gültige E-Mail-Adresse.
Sind solche E-Mail-Adressen relevant?
In der Firma erlauben wir nur E-Mail-Adressen gemäß RFC 5322, ohne Quotes im localpart, ohne IDN, ...
Beschwert hat sich bis jetzt kein einziger Kunde darüber.
Und das bei count(distinct(emailaddress)) im hohen siebenstelligen Bereich.
Über andere fehlende Eingabemöglichkeiten gibt's laufend Beschwerde-E-Mails - z.B. über (bis vor kurzem) fehlende Staaten wie Kosovo, fehlende Autos (meist ganz neue Modelle) usw.
cu,
Andreas
@@MudGuard:
nuqneH
Für den Nutzer ist auch иван@россия.рф eine gültige E-Mail-Adresse.
Sind solche E-Mail-Adressen relevant?
Für alle, die Nicht-ASCII-Zeichen bspw. in IDNs verwenden, ja. Der deutschsprachige Raum zählt dazu.
Qapla'
Hi,
Für alle, die Nicht-ASCII-Zeichen bspw. in IDNs verwenden, ja. Der deutschsprachige Raum zählt dazu.
Wenn, dann nur ein verschwindend kleiner Anteil davon. Siehe mein vorheriges Posting - keine Beschwerden ...
cu,
Andreas
[latex]Mae govannen![/latex]
Für alle, die Nicht-ASCII-Zeichen bspw. in IDNs verwenden, ja. Der deutschsprachige Raum zählt dazu.
Wenn, dann nur ein verschwindend kleiner Anteil davon. Siehe mein vorheriges Posting - keine Beschwerden ...
Können sie ja auch nicht, wenn die Beschwerde wegen der E-Mail-Adresse nicht durchgelassen wird *g*
Ok, mal ernsthaft: Werden ungültige Eingabeversuche irgendwie aufgezeichnet? Falls nicht, könnt ihr nicht wissen, wie viele Personen es nach Fehlversuchen einfach aufgegeben haben. Man kann leider aus dem Ausbleiben von Beschwerden nicht schließen, daß keine Probleme vorhanden sind.
Stur lächeln und winken, Männer!
Kai
Hi,
[latex]Mae govannen![/latex]
Für alle, die Nicht-ASCII-Zeichen bspw. in IDNs verwenden, ja. Der deutschsprachige Raum zählt dazu.
Wenn, dann nur ein verschwindend kleiner Anteil davon. Siehe mein vorheriges Posting - keine Beschwerden ...
Können sie ja auch nicht, wenn die Beschwerde wegen der E-Mail-Adresse nicht durchgelassen wird *g*
Der Mailserver akzeptiert die E-Mails. Und viele Kunden rufen auch an, wenn sie was nicht eingeben können (dank kostenloser Heißlinie ist das ja auch kein Problem)
Ok, mal ernsthaft: Werden ungültige Eingabeversuche irgendwie aufgezeichnet? Falls nicht, könnt ihr nicht wissen, wie viele Personen es nach Fehlversuchen einfach aufgegeben haben.
Es wäre schon sehr seltsam, wenn die Beschwerden NUR bei der E-Mail-Adresse ausbleiben.
cu,
Andreas
@@MudGuard:
nuqneH
Für alle, die Nicht-ASCII-Zeichen bspw. in IDNs verwenden, ja. Der deutschsprachige Raum zählt dazu.
Wenn, dann nur ein verschwindend kleiner Anteil davon.
Warum sollte Jürgen Wächter – Inhaber der Domain müller.example – nicht seine Mail-Adresse jürgen@wächter.example verwenden sollen?
(Vielleicht hat er auch waechter.example registriert und darauf die Adresse juergen@waechter.example; das ist aber keine Antwort auf obige Frage.)
Die Wächters mögen ein „verschwindend kleiner Anteil“ sein, die Müllers sind es nicht.
Siehe mein vorheriges Posting - keine Beschwerden ...
Bei mir sieht das Verhältnis so aus: Über schlechte Formulare geärgert – ständig. Deswegen Beschwerde-E-Mail geschrieben – so gut wie nie.
Qapla'
Hi,
Warum sollte Jürgen Wächter
wen interessieren schon Wächters? ;-)
cu,
Andreas
Om nah hoo pez nyeetz, MudGuard!
wen interessieren schon Wächters? ;-)
mich. Der Weihnachtsmann hat Band 5 gebracht. Ich bin gespannt.
Matthias
gudn tach!
Warum sollte Jürgen Wächter – Inhaber der Domain müller.example – nicht seine Mail-Adresse jürgen@wächter.example verwenden sollen?
weil er nach ein paar versuchen aufgegeben hat, sowas als e-mail-adresse zu verwenden, da es noch zu viele technische huerden gibt (nicht in der theorie, aber in der umsetzung).
prost
seth
@@seth_not@home:
nuqneH
Warum sollte Jürgen Wächter – Inhaber der Domain müller.example
Dass es wächter.example heißen sollte, haben sicher alle bemerkt.
weil er nach ein paar versuchen aufgegeben hat, sowas als e-mail-adresse zu verwenden, da es noch zu viele technische huerden gibt (nicht in der theorie, aber in der umsetzung).
Ja, leider. Obwohl: Opera war vorneweg, Firefox unterstützt inzwischen auch Nicht-ASCII-Zeichen bei <input type="email">
. Chrome immer noch nicht. Safari sendet das Formular, weil er generell buggy ist. IE 10 hab ich grad nicht zur Hand.
Qapla'