2016-04-19 6 views
0

This HTML input färbt sich rot, um anzuzeigen, dass das Muster nicht übereinstimmt, wenn der Wert in der Eingabe "1" ist.Warum funktioniert diese einfache Regex überall außer html5 Eingabemuster-Attribut?

var inp = document .createElement ('input'); 
inp .pattern = '^\d+\.?\d*$'; 
document .getElementById ("foo") .appendChild (inp); 

Die Regex /^\d+\.?\d*$/ matches "1", wenn ich es an anderer Stelle testen. Sieht so aus als müsste es auch.

Warum stimmt das Formularelement nicht überein? (Firefox.)

+0

Umgekehrte Schrägstriche müssen in Stringliterale entkommen sein - nicht in HTML-Attribute oder aber Regex-Literale. – Bergi

Antwort

2

String-Darstellungen, Sohn.

Die Verwendung des Musterattributs ist insofern korrekt, als Sie Zeichenfolgenliterale verwenden. Von MDN:

Die reguläre Ausdruck Sprache ist die gleiche wie JavaScript. Das Muster ist nicht von Schrägstrichen umgeben.

jedoch in Stringliterale müssen Sie die \ entkommen, bevor der Schrägstrich seine eigene li'l Interpretation in einem String wörtlichen Sinn bekommt. Wenn Sie es entkommen, wird es als ein tatsächlicher Schrägstrich und dann das gesamte Muster wird von der RegExp-Engine als ein Sonderzeichen erkannt werden.

var inp = document.createElement('input'); 
inp.pattern = '^\\d+\\.?\\d*$'; 
document.getElementById("foo").appendChild(inp); 

https://jsfiddle.net/qatt3rwt/4/

+0

@Christoph: Ich mochte die erste Revision besser :-) – Bergi

+0

Lustig - ja, lehrreich - meh ... – Christoph

+0

@Christoph, Bergi Hoffentlich bist du jetzt beide glücklich. :) (Ich habe noch bearbeitet, als Sie die Antwort Christoph bearbeitet haben. Ich denke, das bringt mir bei, zuerst den Code zu geben und dann eine Erklärung hinzuzufügen.) –

Verwandte Themen