Tach!
Ich habe das String Literal mit einfachem Hochkomma versehen und alle überflüssingen \ entfernt. Damit der Backslash erkannt wird braucht man wirklich 4 \ bzw 3. Nur so kommt die Alert Meldung. Aber ich dachte eigentlich einer müsste doch reichen?
Nein, weil der bereits vom String-Literal vereinnahmt wird. Da kommt dann nur noch ein / beim Regex an. Du willst aber / und \ prüfen.
Vielleicht wird es etwas deutlicher, wenn wir mal den / an eine andere Stelle setzen.
RegExp('[\\:*?"<>|/]');
Zwei \\
werden benötigt, um ein einzelnes wörtliches \ in einem String-Literal darzustellen. Der Regexp bekommt daraufhin \:
und denkt sich, dass das ein maskierter : ist und weg war der verbliebene \.
Deswegen brauchte es doppelt so viele, damit das Stringliteral seinen Teil bekommt und für den Regex noch genügend übrigbleiben.
new RegExp('[\\\\/:*?"<>|]'); if(!fname.match(rexp))
Aus zwei geschachtelten Kontexten mach ich mal nur einen und außerdem ist wieder der / ans Ende gewandert.
if(!fname.match(/[\\:*?"<>|\/]/))
Zwei Backslashes braucht es, damit einer wörtlich übrigbleibt und nicht \:
als maskiertes : gewertet wird. Den \ vor dem / braucht es, damit der / nicht als Regex-Ende erkannt wird.
dedlfix.