Ich habe versucht, eine vollständige Liste von Mustern zu finden, die für die Überprüfung der Eingabe mittels HTML5-Formularverifizierung für verschiedene Typen verwendet werden, insbesondere url
, email
, tel
und so weiter, aber ich konnte keine finden. Derzeit sind die integrierten Versionen dieser Eingabeüberprüfungen alles andere als perfekt (und tel
überprüft nicht einmal, ob das, was Sie eingeben, eine Telefonnummer ist). Also fragte ich mich, welche Muster ich verwenden könnte, um zu überprüfen, ob der Benutzer das richtige Format in die Eingaben eingibt?
Hier sind einige Beispiele für Fälle, in denen die Standardüberprüfung Eingaben erlaubt, die nicht erlaubt sein sollen:
type="email"
Dieses Feld erlaubt E-Mails, die nach dem @ falsche Domains haben, und erlaubt es Adressen mit einem Bindestrich oder Punkt zu beginnen oder zu beenden, was auch nicht erlaubt ist. Also, .example-@x
ist erlaubt.
type="url"
Dieser Eingang erlaubt grundsätzlich jede Eingabe, die mit http://
(Chrome) beginnt und von etwas anderem als einigen Sonderzeichen gefolgt wird, die eine Funktion in URLs haben (\, @, #, ~, usw.). In FF ist alles, was geprüft wird, ob es mit http:
beginnt, gefolgt von etwas anderem als :
(sogar nur http:
ist in FF erlaubt). IE tut das gleiche wie FF, außer dass es http::
nicht verbietet.
Zum Beispiel: http://.
ist in allen dreien erlaubt. Und so ist http://,
.
type="tel"
Gegenwärtig gibt es keine eingebaute Verifizierung für Telefonnummern in einem der Hauptbrowser (es funktioniert zu 100% genauso wie ein type="text"
, außer dem mobilen Browser mitzuteilen, welche Art von Tastatur angezeigt werden soll.
Da die Browser in jedem dieser Fälle kein konsistentes Verhalten zeigen und das Verhalten, das sie zeigen, sehr einfach ist und viele falsche Positive aufweist, kann ich meine HTML-Formulare überprüfen (immer noch mit HTML5-Eingabe) Verifikation)?
PS: Ich poste dies, weil ich es für nützlich halten würde, eine vollständige Liste von Formularverifizierungsmustern zu haben, also dachte ich, dass es auch für andere nützlich sein könnte (und natürlich können andere auch ihre Lösungen veröffentlichen) ).
Diese Muster sind nicht unbedingt einfach, aber hier ist das, was ich in jeder Situation am besten finde. Beachten Sie, dass (vor kurzem) Internationalisierte Domainnamen ( IDNs ) ebenfalls verfügbar sind. Damit ist eine nicht testbare Menge an Zeichen in URLs erlaubt (es gibt immer noch viele Zeichen, die in Domain-Namen nicht erlaubt sind, aber die Liste der erlaubten Zeichen ist so groß und wird sich so oft für verschiedene Top-Level ändern Domains, dass es nicht praktikabel ist, mit ihnen Schritt zu halten). Wenn Sie die internationalisierten Domänennamen unterstützen möchten, sollten Sie das zweite URL-Muster verwenden, andernfalls verwenden Sie das erste.
Hier ist eine Live-Demo , um die folgenden Muster in Aktion zu sehen. Scrollen Sie nach unten für eine Erklärung, Argumentation und Analyse dieser Muster.
URLs
%Vor%E-Mails
%Vor%Telefonnummern
%Vor%Westliche Namen
%Vor%Erläuterung:
-
beginnen oder enden
.international
"), die sich höchstwahrscheinlich bald nicht ändern werden. 0.0.0.0
, 127.0.0.1
usw. werden nicht auf 01.1.1.1
) [4] . Beachten Sie, dass das Standardmuster " http:.*
", das in modernen Browsern erstellt wird, immer erzwungen wird. Selbst wenn Sie https?://
am Anfang in diesem Muster entfernen, wird es dennoch erzwungen. Verwenden Sie type="text"
, um es zu vermeiden.
Erläuterung:
Da eine große Anzahl von Zeichen in IDNs erlaubt ist, ist es praktisch nicht möglich, jede mögliche Kombination in einem HTML-Attribut aufzulisten (Sie würden ein riesiges Muster bekommen, in diesem Fall ist es viel besser, es zu testen) eine andere Methode als Regex) [5] .
!"#$%&'()*+, ./ :;<=>?@ [\]^_'' {|}~
mit Ausnahme eines Zeitraums als Domänentrenner.
[!-,]
[\.\/]
[:-@]
[\[-'']
[{-~]
. xn--*
haben, wobei *
eine codierte Version der tatsächlichen TLD ist. Diese Kodierung verwendet 2 lateinische Buchstaben oder arabische Ziffern pro Originalzeichen, so dass das willkürliche Limit hier auf 30 verdoppelt wird. Erläuterung:
Da E-Mail-Adressen eine ganze Menge mehr als dieses Muster erfordern, um 100% idiotensicher zu sein, wird dies die fast 100% von ihnen abdecken. Ein 100% vollständiges Muster existiert , enthält aber PCRE (PHP) - nur Regex-Lookaheads , so wird es in HTML-Formularen nicht funktionieren.
!#$%&'*+\/=?^_''{|}~.-
[6] enthalten. @
darf nur 63 Zeichen lang sein, und die Gesamtadresse darf nur 254 Zeichen lang sein [8] . -
oder .
beginnen oder enden, und zwei Punkte dürfen nicht nacheinander erscheinen [8] .Erläuterung:
[CTRY]
steht für den Ländercode und X steht für die erste Ziffer ungleich null (z. B. 6
in Mobiltelefonnummern),
00[CTRY]X
+[CTRY]X
0X
[CTRY]X
(Dies ist nicht offiziell korrekte Syntax, aber Chrome Autofill scheint es aus irgendeinem Grund zu mögen.) Dieser Regex ist nur für 10-stellige Telefonnummern. Da die Länge der Telefonnummern zwischen den Ländern variieren kann, ist es am besten, eine weniger strenge Version dieses Musters zu verwenden oder sie so zu modifizieren, dass sie für die gewünschten Länder funktioniert. Daher sollte dieses Muster im Allgemeinen als eine Art Vorlagenmuster verwendet werden.
Ja, ich weiß, ich bin sehr westlich orientiert, aber das könnte auch nützlich sein, da es schwierig sein könnte, dies auch zu tun, und falls Sie auch eine Website für westliche Leute erstellen, wird dies immer so sein Arbeit (asiatische Namen haben eine Darstellung in genau diesem Format auch).
ÐÞ ðþ
):
A-Z
stimmt mit allen lateinischen Großbuchstaben überein: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Ά-Ϋ
stimmt mit allen griechischen Großbuchstaben überein, einschließlich der akzentuierten Buchstaben: Ά·ΈΉΊΌΎΏΐ ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ ΪΫ
. À-ÖØ-Þ
entspricht allen lateinischen Großbuchstaben mit Akzenten und den Buchstaben Ð und Þ: ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
. Dazwischen liegt auch das Zeichen ×
(zwischen Ö
und Ø
), das so weggelassen wird. a-z
entspricht allen lateinischen Kleinbuchstaben: abcdefghijklmnopqrstuvwxyz
ά-ώ
stimmt mit allen griechischen Kleinbuchstaben überein, einschließlich der akzentuierten Buchstaben: άέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ
ß-öø-ÿ
entspricht allen lateinischen Kleinbuchstaben mit Akzenten und den Buchstaben ß, ð und þ: ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
. Dazwischen liegt auch das Zeichen ÷
(zwischen ö
und ø
), das so weggelassen wird. Tags und Links html regex html5 forms form-verification