Also ehrlich gesagt blicke ich da jetzt nicht mehr durch vor so vielen unterschiedlichen Lösungen :-)
Die Essenz meines Vorschlags ist, nicht JavaScript für etwas zu benutzen, dass in HTML schon in besserer Form existiert. Der reguläre Ausdruck musste sozusagen als Nebenwirkung angeglichen werden: Er wird nun nicht mehr benutzt, um unerlaubte Zeichen zu löschen, sondern um zu testen, ob die gegebene Zeichenkette keine unerlaubten Zeichen enthält.
Einmal:
^[^\/:*\?\u0022<>|]+$
Was macht denn hier das "\u0022" ?
Das steht für das doppelte Anführungszeichen, da der reguläre Ausdruck in ein HTML-Attribut eingeschlossen wird und das Attribut selber von Anführungszeichen begrenzt wird, muss es als Sonderzeichen in diesem Kontext maskiert werden.
Und warum hier ^[^ ? Das erste ^ bedeutet doch Stringanfang und das zweite ^ Negierung also Zeichen die nicht erlaubt sind oder?
Dann:
/[\\\/:*\?"<>|]/g
Warum hier dreimal \\ ?
Das stammt nun nicht von mir, aber bei diesem reguläre Ausdruck wird wohl auch der Backslash gematcht, daher die ersten beiden Backslashes, anschlißend wird auch der gewöhnliche Slash gematcht, deshalb der dritte Backslash. Ob das sein muss, und ob auch das Dollarzeichen gematcht werden muss, wie Felix meint, kann ich nicht aus dem FF sagen, das sollte aber mit einer kurzen Recherche zu beantworten sein.
Auch klappt bei mir dieses Fiddle nicht. http://jsfiddle.net/brq5jbvw/
Ich kann hier eingeben was ich will auch "*?. Alles ist erlaubt. Oder mach ich was falsch?
Wenn du ein nicht-erlaubtes Zeichen eingibst, sollte das Feld einen roten Rahmen erhalten, weil es vom Browser als ungültig erkannt wird. Wenn du versuchen würdest das Formular in diesem Zustand abzuschicken, würde der Browser das Absenden verweigern bis alle Daten korrekt ausgefüllt worden sind. Dabei informiert der Browser auch evtl. angeschlossene assistive Software, so dass u.a. auch blinde Menschen den Fehler wahrnehmen können. Du hast außerdem die Möglichkeit mit CSS und den Pseudoklassen :valid und :invalid selber gestalterisch tätig zu werden, um das Surferlebnis deiner Nutzer noch zu verbessern. Das Beispiel ist fern ab von vollständig, es sollte nur dazu dienen, mit dem regulären Ausdruck zu spielen, nicht um als Musterbeispiel für eine gelungene Formular-Validierung zu dienen.