2012-04-25 20 views
5

Ich muss eine in einer Methode wie folgt validieren.Regex, um einen Dateinamen zu validieren

validateFileName(Editable s) { 
     String filtered_str = s.toString(); 
     if (filtered_str.matches(".*[regexp].*")) { 
      filtered_str = filtered_str.replaceAll("[regxp]", ""); 
      s.clear(); 
      s.append(filtered_str);} 

Welche Regexps sollte ich verwenden, um alle ungültigen Zeichen und Leerzeichen auszuschließen? Ich verwende Linux

+3

Die einzigen ungültigen Zeichen in einem Dateinamen in einem Unix-Dateisystem sind '/' (Pfadtrennzeichen) und '\ 0' (Ende der Zeichenfolge in C). – geekosaur

Antwort

4

Wenn Ihre Idee nur ilegal und Raum auszuschließen char Sie so etwas wie verwenden:

'^[^*&%\s]+$'

, wo Sie jede „ilegal“ char in die Liste der Zeichen hinzufügen können (in diesem Fall ignoriert es *, &,% und Leerzeichen) \s ist der Platz! Die ^ innerhalb der [] ist Teil der Regex-Syntax bedeutet es: tun nicht entsprechen alle Zeichen innerhalb [].

9

Wenn Sie ein POSIX-kompatibles Betriebssystem verwenden, sind die zulässigen Zeichen in einem Dateinamen a-z, A-Z, 0-9, Punkt, Unterstrich und Bindestrich. Die Regex übereinstimmen ‚illegal‘ Zeichen daher

[^-_.A-Za-z0-9]

Nachtrag wäre: Das ist, wenn Sie eine voll tragbaren Dateinamen möchten. Wie ich in Josip's Kommentar unten korrigiert habe, erlaubt POSIX selbst mehr Charaktere.

+0

Dies scheint falsch zu sein, denn http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html sagt nur "Die Bytes, aus denen der Name besteht, dürfen die Zeichen oder nicht enthalten." im Abschnitt 3.170 Dateiname. –

+0

Ah, ja. Ich hätte in meiner Antwort klarstellen sollen, dass Sie, wenn Sie einen ** vollständig portablen ** Dateinamen möchten, den von mir beschriebenen Regex verwenden würden. Dies kam aus dem Buch _POSIX Programmer's Guide: Schreiben portabler UNIX-Programme von Donald Lewine (1991), S. 63-64. – Anachronist

+0

Das ist immer noch sehr restriktiv, was für 1991 verständlich ist, aber nicht wirklich heutzutage, wenn z.B. Kommas und Leerzeichen in Dateinamen sind bei den Benutzern so üblich. Sie würden sich wahrscheinlich beschweren, wenn Sie dies anwenden würden, und die Einhaltung der Grenzwerte aus den 80er Jahren würde nicht unbedingt als vernünftige Begründung angesehen werden. –

Verwandte Themen