2012-04-25 5 views
5

Мне нужно проверить его в методе, подобном этому.Regex для проверки имени файла

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

Какие регулярные выражения следует использовать для исключения всех незаконных символов и пробелов? Я использую Linux

+3

Единственными недопустимыми символами в имени файла в файловой системе Unix являются '/' (разделитель путей) и '\ 0' (конец строки в C). – geekosaur

ответ

4

Если ваша идея исключить только ilegal пространство и голец вы можете использовать что-то вроде:

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

, где вы можете добавить любой «ilegal» символ в списке символов (в этом случае он игнорирует *, &,% и пробел) \s - это пространство! ^ внутри [] является частью синтаксиса регулярных выражений: do не соответствует любым символам внутри [].

9

Если вы используете совместимую с POSIX операционную систему, юридические символы в имени файла: a-z, A-Z, 0-9, период, подчеркивание и дефис. Регулярное выражение для соответствия «нелегальные» персонажи поэтому быть

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

Добавление: Это если вы хотите полностью портативную имя файла. Поскольку я был исправлен в комментарии Josip ниже, POSIX сам на самом деле позволяет больше символов.

+0

Это кажется неправильным, потому что http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html говорит только «Байт, составляющий имя, не должен содержать символов или ». в разделе 3.170 Имя файла. –

+0

А, да. Я должен был уточнить в своем ответе, что если вы хотите ** полностью переносимое ** имя файла, вы должны использовать регулярное выражение, которое я описал. Это произошло из книги «Руководство программиста POSIX: написание переносимых UNIX-программ» Дональда Льюина (1991), стр. 63-64. – Anachronist

+0

Это все еще очень ограничительное, что понятно в 1991 году, но не в наши дни, когда, например, запятые и пробелы в именах файлов настолько распространены среди пользователей. Вероятно, они пожаловались бы, если бы вы применили это, и соблюдение ограничений с 80-х годов не обязательно будет считаться разумным обоснованием. –

Смежные вопросы