Sollte ich ^ und $ in der HTML5-Eingabe-Regex-Mustervalidierung verwenden?

Lesezeit: 6 Minuten

Sollte ich ^ und in der HTML5 Eingabe Regex Mustervalidierung verwenden
Marco Luglio

Ich habe meistens Beispiele ohne die Zeichen ^ (Circumflex) und $ (Währung oder Dollar) gesehen, um den Anfang und das Ende der übereinstimmenden Zeichenfolge zu markieren. Allerdings habe ich diesbezüglich nichts in der HTML5-Spezifikation gefunden. Sind sie im Muster enthalten? Die HTML5-Spezifikation besagt, dass sie implizit sind.

Der reguläre Ausdruck des kompilierten Musters muss, wenn er mit einer Zeichenfolge abgeglichen wird, seinen Anfang am Anfang der Zeichenfolge und sein Ende am Ende der Zeichenfolge verankert haben. Dies impliziert, dass die für dieses Attribut verwendete reguläre Ausdruckssprache dieselbe ist wie die in JavaScript verwendete, außer dass das Musterattribut mit dem gesamten Wert verglichen wird, nicht nur mit einer Teilmenge (etwas, als ob es ein ^(?: am Anfang implizieren würde des Musters und ein )$ am Ende).

In type=”text”-Eingaben funktioniert das Muster mit beiden Formaten einwandfrei, aber in type=”tel”-Eingaben musste ich die Zeichen entfernen, damit die Regex wie erwartet funktioniert. Ich habe sowohl in Opera als auch in Firefox getestet.

Ist das ein Browser-Bug? Soll ich einen Bug in Bugzilla etc. melden?


Bearbeiten: Anscheinend bin ich auf einen seltsamen Fehler gestoßen, weil ich keinen reduzierten Testfall erstellen kann. Eine einfache Eingabe in eine Seite zeigt nicht das oben beschriebene Verhalten. Die Frage bleibt jedoch. Soll ich die verflixten ^- und $-Anker verwenden oder nicht?

  • developer.mozilla.org/en/HTML/Forms_in_HTML erwähnt dies auf der tel Eingang: Zeilenumbrüche werden automatisch aus dem Eingabewert entfernt, es wird jedoch keine andere Syntax erzwungen, da Telefonnummern international stark variieren. Sie können Attribute wie pattern und maxlength verwenden, um die in das Steuerelement eingegebenen Werte einzuschränken.. Es wird nichts Konkretes über die erwähnt tel tippe seine ein pattern Attributbeschreibung.

    – Der Nagel

    4. Februar 2012 um 16:54 Uhr

  • Tatsächlich, wenn ich mit Firefox nachschaue, sehe ich kein seltsames Verhalten in der tel Eingänge. Können Sie ein vollständiges Beispiel geben, einschließlich Code, was Sie erwartet haben und was Sie stattdessen bekommen haben?

    – Der Nagel

    4. Februar 2012 um 16:59 Uhr


  • Ja, das habe ich gerade bemerkt und der Frage eine Bearbeitung angehängt. Es ist etwas schwierig, mein Formular hier zu posten, aber ich werde sehen, was ich tun kann.

    – Marco Luglio

    4. Februar 2012 um 17:03 Uhr

  • Kannst du wenigstens den genauen Code der posten input Element betrifft es? Und bitte geben Sie eine Verknüpfung dann verweisen Sie auf eine Spezifikation (ich hoffe, sie ist von W3.org)

    – Der Nagel

    4. Februar 2012 um 17:16 Uhr


  • Und wie die W3-Spezifikation besagt, die ^ und $ sind impliziert. Das bedeutet, dass Sie sie dort nicht explizit einfügen müssen.

    – Der Nagel

    4. Februar 2012 um 17:23 Uhr

Sollte ich ^ und in der HTML5 Eingabe Regex Mustervalidierung verwenden
Markus Amery

Der Abschnitt des HTML-Standards auf der pattern Attribut heißt es immer noch, dass es immer am Anfang und am Ende verankert ist, wie bereits in der Frage zitiert:

Der reguläre Ausdruck des kompilierten Musters muss, wenn er mit einer Zeichenfolge abgeglichen wird, seinen Anfang am Anfang der Zeichenfolge und sein Ende am Ende der Zeichenfolge verankert haben.

Wir können ein einfaches Test-Snippet verwenden, um dieses Verhalten zu bestätigen:

<form>
  <input required pattern="abc">
  <button>Submit</button>
</form>

Sie werden feststellen, dass das obige Formular Werte von ablehnt foo abc und abc foo; Geben Sie nur genau die Zeichenfolge ein abc wird akzeptiert. Das beweist das pattern="abc" ist äquivalent zu pattern="^abc$" und dass Sie die nicht angeben müssen ^ und $ ausdrücklich.

Soweit ich das beurteilen kann, ist die konkurrierende Antwort hier, in der behauptet wird, dass Browser ein anderes Verhalten unter Verstoß gegen die Spezifikation implementiert haben, völlig falsch. Sie können Firefox 15 von herunterladen https://ftp.mozilla.org/pub/firefox/releases/15.0/win32/en-GB/ und testen Sie das obige Snippet selbst, und Sie werden sehen, dass das Verhalten genau wie in einem modernen Browser ist. Oder, da es Sie wahrscheinlich nicht stört, können Sie sich diesen Screenshot von mir ansehen, wie ich das für Sie mache:

Screenshot dieser Antwort in Firefox 15, der das obige Formular zeigt, das die Eingabe von "abc foo" ablehnt

1647187330 617 Sollte ich ^ und in der HTML5 Eingabe Regex Mustervalidierung verwenden
Skarabäus

Nach der Norm, die Regex ist am Anfang und am Ende verankert. Aber, in der Praxis (getestet FF 15 und Chrome 21) es ist nur am Start verankert!

Wenn Sie also sowohl mit dem Standard als auch mit der Realität kompatibel sein wollen, sollten Sie Ihre Regex mit a verankern $ ausdrücklich. Ob zu verwenden ^ auch ist bis zu Ihnen – es ist nicht notwendig.

Natürlich wissen Sie, dass Telefonnummern in verschiedenen Formen vorkommen,

z.B

  • Wenn Sie sich in Wien, Österreich, befinden, werden Sie durch Wählen von “4000” mit dem Rathaus verbunden.
  • Wenn Sie sich in Innsbruck, Österreich befinden, müssen Sie “014000” wählen, um das Wiener Rathaus anzurufen
  • Wenn Sie sich in New York, USA befinden, müssen Sie +4314000 wählen, um dieselbe Nummer zu wählen.

Dies hat historische Gründe, da die alte Mechanik die Aufgabe, den Anruf von einem Gerät zum nächsten zu verbinden, mit jeder Ziffer delegierte (Dies ist auch der Grund, warum Nebenstellen am Ende einer Nummer stehen und nicht am Anfang, ua DNS, wo Sie Ihre Domainnamen vorne erweitern können, aber nicht am Ende)

Jetzt eine Regex mit beiden Ankern ^ und $ stimmt nur dann mit einer Telefonnummer überein, wenn sie in genau derselben Form angegeben wird. Mit nur der $ anker wird es zuverlässig mit der gleichen Telefonnummer übereinstimmen, solange keine andere Durchwahl angegeben wird. Kein Anker, dh auswerfen ^ und $ passt unabhängig von Standortcodes und Erweiterungen, führt jedoch zu Unzuverlässigkeit:

Die Verwendung von „4000“ als Muster für das Wiener Rathaus entspricht „4000“, „014000“ und „+4314000“, aber auch „+44140001“, was eine deutsche Bank ist.

  • Ich bin jetzt etwas verwirrt. Vielleicht hätte ich ein Beispiel mit meiner Frage posten sollen. Mit „^[\d]{10}$” zum Beispiel stimmt nicht mit 1234567890 in einer Tel-Eingabe überein, aber es sollte, oder?

    – Marco Luglio

    4. Februar 2012 um 16:29 Uhr

  • Woher kommt dieses Gerede von Telefonnummern? Hat sich die Frage geändert?

    – Borodin

    4. Februar 2012 um 16:41 Uhr

  • Nein, es geht speziell um den TEL-Eingang

    – Marco Luglio

    4. Februar 2012 um 16:43 Uhr

  • Um es in Zusammenhang zu bringen, würde ich empfehlen, das Ende ancho ($), aber nicht der Startanker (^) – für mich ist dies der Sweet Point zwischen Zuverlässigkeit und Breite der Übereinstimmung.

    – Eugen Rieck

    4. Februar 2012 um 22:06 Uhr

  • -1, weil der größte Teil dieser Antwort nicht die gestellte Frage anspricht, und das bisschen, was schließlich tut es in den letzten beiden Absätzen ansprechen, ist falsch. <input type="tel" pattern="4000"> wird die Eingabe von ablehnen 014000im Gegensatz zu dieser Antwort.

    – Mark Amery

    6. Dezember 2018 um 23:17 Uhr

998330cookie-checkSollte ich ^ und $ in der HTML5-Eingabe-Regex-Mustervalidierung verwenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy