Sollte ich ^ und $ in html5 Input Regex Pattern Validation verwenden?

9

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

Der reguläre Ausdruck des kompilierten Musters muss, wenn er mit einer Zeichenfolge verglichen wird, am Anfang der Zeichenfolge verankert sein, und sein Ende muss am Ende der Zeichenfolge verankert sein. Dies bedeutet, dass die für dieses Attribut verwendete reguläre Ausdruckssprache dieselbe ist wie die in JavaScript verwendete, außer dass das pattern-Attribut mit dem gesamten Wert verglichen wird, nicht nur mit irgendeiner Untermenge (etwas so, als würde es ein ^ (?: am Anfang) enthalten des Musters und a) $ am Ende).

In type="text" -Eingaben funktioniert das Muster in beiden Formaten gut, 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? Sollte ich einen Bug in Bugzilla etc. Einreichen?

Bearbeiten: Es scheint, dass ich über einen seltsamen Fehler gestolpert bin, weil ich keinen reduzierten Testfall erstellen kann. Eine einfache Eingabe auf einer Seite zeigt nicht das oben angegebene Verhalten. Die Frage bleibt jedoch bestehen. Sollte ich, oder sollte ich nicht die Darn ^ und $ Anker verwenden?

    
Marco Luglio 04.02.2012, 16:06
quelle

2 Antworten

2

Natürlich weißt du, dass Telefonnummern in verschiedenen Formen vorkommen,

z.B.

  • Während Sie in Wien, Österreich sind, werden Sie mit "4000" verbunden das Rathaus.
  • während Sie in Innsbruck, Österreich sind, müssen Sie "014000" wählen, um das Wiener Rathaus zu wählen
  • Während Sie in New York, USA sind, müssen Sie +4314000 wählen, um dieselbe Nummer zu wählen.

Das hat historische Gründe, denn das alte mechanische System delegiert die Aufgabe, den Anruf mit jeder Ziffer von einem Gerät zum nächsten zu verbinden (Dies ist auch der Grund, warum Erweiterungen am Ende einer Nummer stehen und nicht am Anfang , das DNS, wo Sie Ihre Domain-Namen an der Front, aber nicht am Ende erweitern können)

Nun wird eine Regex mit den beiden Ankern ^ und $ nur mit einer Telefonnummer übereinstimmen, wenn sie genau in der gleichen Form gegeben ist. Mit nur dem $ Anker wird es zuverlässig dieselbe Telefonnummer finden, solange keine andere Erweiterung angegeben ist. Keine Verankerung, d. H. Das Fallenlassen von ^ und $ wird unabhängig von Ortscodes und Erweiterungen erfolgen, führt jedoch zu Unzuverlässigkeit:

Die Verwendung von "4000" als Muster für das Wiener Rathaus passt zu "4000", "014000" und "+4314000", aber es passt auch "+44140001", eine deutsche Bank.

    
Eugen Rieck 04.02.2012 16:24
quelle
2

Nach dem Standard ist der Regex an der Starten und beenden Sie . In der Praxis (getestet FF 15 und Chrome 21) ist es jedoch nur am Anfang verankert!

Wenn Sie also sowohl mit dem Standard als auch mit der Realität kompatibel sein wollen, sollten Sie Ihre Regex explizit mit einem $ verankern. Ob du ^ verwenden willst, liegt auch bei dir - es ist nicht notwendig.

    
Scarabeetle 25.09.2012 14:17
quelle