2016-07-28 17 views
6

Tôi đang tìm cách xác thực một số tên tệp. Nhưng không thể tìm ra đúng regex tên tập tin có thể được bất cứ điều gì, nhưng cần phải kiểm tra xem tên tập tin kết thúc vớiTiện ích mở rộng Regex và ngôn ngữ

  1. _ nhấn
  2. en hoặc ru hay cy (mã quốc gia 2 chữ cái)
  3. . (Dot)
  4. phần mở rộng (jpeg, jpg, mp4, png, gif)

để nộp

my_file_dummy_name.jpeg - not valid 
my_file_dummy_name_en.jpeg - valid 

Đối Bây giờ tôi cố gắng này (và đang làm việc nhưng có lẽ đó là giải pháp tốt hơn)

/(\_\w.\.\w+)/g 

Một hơn:

/(\_[a-z]{2}\.[a-z]{3,4})/g 

Trả lời

10

Vấn đề với regex ban đầu của bạn là, trong khi nó sẽ phù hợp với tên tập tin bạn muốn cho phép, nó cũng sẽ phù hợp với những thứ bạn không muốn.

Ví dụ, sau đây regex

/(\_\w{2}\.\w+)/g 

sẽ phù hợp với các tập tin my_file_dummy_name_de.mpeg, mà là một tập tin video từ Đức. Rõ ràng, chúng tôi không muốn xem nó ngay từ đầu.

Hãy thử regex này:

_(en|ru|cy)\.(jpeg|jpg|mp4|png|gif)$ 

Demo đây:

Regex101

+1

Hãy để những kẻ bắt đầu bắt đầu con trai! –

+1

Đánh bại tôi với nó - https://jsfiddle.net/j93mtwjq/ –

+1

Chắc chắn, điều này có thể được cải thiện một chút: '/_(?:en|ru|cy)\.(?:jpe?g|mp4|png | gif) $/', nhưng nó phụ thuộc vào thứ mà người ta tìm kiếm trong regex :) –

2

Nếu bạn muốn regex để làm tất cả những kiểm tra cho bạn, có một cách chặt chẽ hơn để đi về này:

/_(en|ru|cy)\.(jpeg|jpg|mp4|png|gif)$/ 

Bằng cách này bạn đảm bảo tất cả những hạn chế mà bạn đã đề cập. Ngoài ra, không cần phải có cờ hình chữ nhật g vì chúng tôi chỉ quan tâm đến phần cuối của chuỗi (đây là lý do tại sao tôi đặt neo EOL $). Tuy nhiên, bạn có thể thêm cờ i gnore nếu có khả năng xảy ra trường hợp hỗn hợp trong tên tệp.

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