2012-04-25 13 views
5

Ho bisogno di convalidare un in un metodo come questo.Regex per convalidare un nome file

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);} 

Quali espressioni regolari devo usare per escludere tutti i caratteri e spazi bianchi non validi? Sto usando linux

+3

Gli unici caratteri non validi in un nome file su un file system Unix sono '/' (percorso separatore) e '\ 0' (fine stringa in C). – geekosaur

risposta

4

Se la vostra idea è solo per escludere ilegal e lo spazio char si può usare qualcosa di simile a:

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

in cui è possibile aggiungere qualsiasi char "ilegal" nella lista di caratteri (in questo caso ignora *, &,% e spazio) \s è lo spazio! Lo ^ all'interno dello [] fa parte della sintassi regex che significa: fare non corrispondere a qualsiasi carattere all'interno di [].

9

Se si utilizza un sistema operativo conforme a POSIX, i caratteri legali nel nome di un file sono a-z, A-Z, 0-9, punto, trattino basso e trattino. La regex per abbinare caratteri 'illegali' Sarebbe pertanto

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

Addendum: Questo è se si vuole un nome file completo portatile. Siccome sono stato corretto nel commento di Josip qui sotto, POSIX stesso permette effettivamente più personaggi.

+0

Questo sembra non essere corretto, perché http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html dice solo "I byte che compongono il nome non devono contenere i caratteri o ". nella sezione 3.170 Nome file. –

+0

Ah, si. Avrei dovuto chiarire nella mia risposta che se si desidera un nome file ** completamente portatile **, si utilizzerà la regex che ho descritto. Questo è venuto dal libro _POSIX Programmer's Guide: Writing Portable UNIX Programs_ di Donald Lewine (1991), pp. 63-64. – Anachronist

+0

Questo è ancora molto restrittivo, il che è comprensibile per il 1991, ma non proprio in questi giorni, quando ad es. virgole e spazi nei nomi dei file sono così comuni tra gli utenti. Probabilmente si lamenterebbero se tu lo applicassi, e l'aderenza ai limiti degli anni '80 non sarebbe necessariamente considerata una ragionevole motivazione. –

Problemi correlati