2017-02-13 3 views
0

ich die folgende Codezeile, um ungültige Zeichen aus einem Dateinamen zu entfernen:ungültige Zeichen aus einem Dateinamen, aber lassen Sie Leerzeichen

str= str.replace(/([^a-z0-9]+)/gi, '-'); 

Das funktioniert gut, aber es beseitigt auch die Räume, wie kann ich nur Entfernen Sie die unzulässigen Zeichen, aber lassen Sie die Räume?

+0

Wie bestimmen Sie "illegal" Charakter? Deine Regex sagt, dass '.',' _' und viele andere Charaktere "illegal" sind, warum? – Toto

+1

Fügen Sie der Klasse '[^ a-z0-9]' einfach den Platz hinzu, damit sie nicht gefunden wird (entfernt). – sln

Antwort

1

Ungültige Zeichen sind here aufgeführt. So ersetzen sie diese regex verwenden /[/\\?%*:|"<>]/g wie folgt aus:

var filename = "f?:i/le> n%a|m\\e.ext"; 
 

 
filename = filename.replace(/[/\\?%*:|"<>]/g, '-'); 
 

 
console.log(filename);

+0

Diese Zeichen sind abhängig vom Betriebssystem . Unter Linux können Sie jedes Zeichen, sogar Leerzeichen in einem Dateinamen haben. – Toto

+0

@Toto Ich habe den Fall von '.' und' 'ausgeschlossen, weil sie nicht wirklich illegal sind! –

2

Sie suchen nach allen nicht numerischen und lateinischen Buchstaben. Wenn Sie den Raum ausschließen möchten aus ersetzt:

einfach einen Raum zur Selektion hinzuzufügen auszuschließen :)

str= str.replace(/([^a-z0-9 ]+)/gi, '-'); 
// add a space here -------^ 
+0

Sorry, aber ich glaube nicht, dass ich verstehe, was du meinst, kannst du es erklären? – user3378165

+0

Ihr Regexp sucht nach Zeichen, die nicht vorhanden sind: Kleinbuchstaben von a-z, Großbuchstaben von A-Z und Zahlen von 0-9, und ersetzt die Übereinstimmung. Um zu vermeiden, Leerzeichen zu ersetzen, wird ein Leerzeichen, wie ich empfohlen habe, erreicht, was Sie wollen, weil Sie versuchen, alles zu finden _ ** nicht ** _ zwischen den [..] 'eckigen Klammern – Pineda

1

Fügen Sie die ‚\ s‘ Leerzeichen zu Ihrem Ausschluss.

str = str.replace(/([^a-z0-9\s]+)/gi, '-'); 
Verwandte Themen