2012-04-25 30 views
5

Tôi cần xác thực một phương thức như thế này.Regex để xác thực tên tệp

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

Tôi nên sử dụng regex nào để loại trừ tất cả các ký tự không hợp lệ và khoảng trắng? Tôi đang sử dụng Linux

+3

Các ký tự không hợp lệ duy nhất trong tên tệp trên hệ thống tệp Unix là '/' (dấu tách đường dẫn) và '\ 0' (kết thúc chuỗi trong C). – geekosaur

Trả lời

4

Nếu ý tưởng của bạn chỉ là để loại trừ ilegal và không gian char bạn có thể sử dụng một cái gì đó như:

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

nơi bạn có thể thêm bất kỳ "ilegal" char vào danh sách các ký tự (trong trường hợp này nó bỏ qua *, &,% và không gian) \s là không gian! ^ bên trong các [] là một phần của cú pháp regex có nghĩa là: làm không khớp với bất kỳ ký tự nào bên trong [].

9

Nếu bạn đang sử dụng hệ điều hành tuân thủ POSIX, các ký tự hợp pháp trong tên tệp là a-z, A-Z, 0-9, dấu chấm, dấu gạch dưới và gạch nối. Regex để phù hợp 'bất hợp pháp' nhân vật sẽ do đó được

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

Phụ lục: Đây là nếu bạn muốn có một tên tập tin đầy đủ xách tay. Khi tôi đã được sửa chữa trong bình luận của Josip dưới đây, POSIX chính nó thực sự cho phép nhiều nhân vật hơn.

+0

Điều này có vẻ không đúng, vì http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html chỉ nói "Các byte soạn tên sẽ không chứa các ký tự hoặc ". trong phần 3.170 Tên tệp. –

+0

Ah, vâng. Tôi nên làm rõ trong câu trả lời của tôi rằng nếu bạn muốn có một ** tên tập tin ** hoàn toàn di động, bạn sẽ sử dụng regex tôi mô tả. Điều này xuất phát từ cuốn sách Hướng dẫn lập trình viên _POSIX: Viết các chương trình UNIX di động của Donald Lewine (1991), tr. 63-64. – Anachronist

+0

Điều đó vẫn còn rất hạn chế, điều này có thể hiểu được cho năm 1991, nhưng không thực sự trong những ngày này, ví dụ: dấu phẩy và dấu cách trong tên tệp rất phổ biến trong số những người dùng. Họ có lẽ sẽ phàn nàn nếu bạn áp dụng điều này, và tuân thủ giới hạn từ những năm 80 sẽ không nhất thiết phải được coi là một lý do hợp lý. –

Các vấn đề liên quan