2016-07-28 13 views
6

Szukam sprawdzania poprawności niektórych nazw plików. Ale nie mogę dowiedzieć się poprawne regex nazwy plików może być cokolwiek, ale trzeba sprawdzić, czy nazwa pliku kończy sięRozszerzenie Regex i język

  1. _ podkreślenia
  2. lub en ru lub CY (kod kraju 2 litery)
  3. . (Kropka)
  4. rozszerzenia (jpeg, jpg, mp4, png, gif)

więc złożyć

my_file_dummy_name.jpeg - not valid 
my_file_dummy_name_en.jpeg - valid 

For Now to próbowałem (i działa, ale może jest lepszym rozwiązaniem)

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

Jeden więcej:

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

Odpowiedz

10

Problem z oryginalnym wyrażeniem regularnym polega na tym, że chociaż pasuje do nazw plików, które chcesz dopuścić, pasowałoby również do rzeczy, których nie chcesz.

Na przykład, następujące regex

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

pasowałby plik my_file_dummy_name_de.mpeg, który jest plik wideo z Niemiec. Oczywiście, nie chcielibyśmy tego oglądać w pierwszej kolejności.

Spróbuj regex:

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

Demo tutaj:

Regex101

+1

Niech upadki rozpoczną się od chłopców! –

+1

Zadzwoń do mnie - https://jsfiddle.net/j93mtwjq/ –

+1

Oczywiście, można to nieco poprawić: '/_(?:en|ru|cy)\.(?:jpe?g|mp4|png | gif) $/', ale to zależy od tego, czego szuka się w regex :) –

2

Jeśli chcesz regex zrobić wszystko sprawdzanie dla ciebie, istnieje bardziej rygorystyczne droga o to:

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

W ten sposób zapewniasz wszystkie wspomniane ograniczenia. Ponadto, nie jest wymagana flaga lobalowa g, ponieważ interesuje nas tylko koniec ciągu (dlatego ustawiam zakotwiczenie EOL $). Można jednak dodać flagę przypadku gnore o numerze i, jeśli w nazwach plików istnieje możliwość występowania zmiętej wielkości liter.