2011-07-20 11 views
22

Próbuję przetestować ciąg nazw plików z tego wzoru:test nazwa pliku z wyrażenia regularnego

^[A-Za-z0-9-_,\s]+[.]{1}[A-Za-z]{3}$ 

Chcę zapewnić, że to rozszerzenie trzyliterowy i pozwalają liter, cyfr i następujących symboli: - _ \ s, aby go poprzedzić, ale nie chcę uwzględniać wszystkich liter i znaków w nazwie pliku. Mógłbym po prostu użyć * zamiast +, ale pasowałoby do 0 lub więcej, które nie byłyby poprawną nazwą pliku.

Oto kilka przykładów, w jaki sposób zasada powinna reagować:

Correct file name.pdf - true 
Correct, file name.pdf - true 
Correct_file_name.pdf - true 
Correctfilename.pdf - true 
Incorrect &% file name.pdf - false 
Incorrect file name- false 

Byłoby wspaniale, gdyby ktoś mógłby wskazać mi w dobrym kierunku.

Dzięki

Odpowiedz

34

Można użyć wyrażenia te Zamiast:

  • \w - jest taki sam jak [a-zA-Z0-9_]
  • \d - jest taki sam jak [0-9]
  • \. - jest taki sam jak [.]{1}

Które dokonać regex:

^[\w,\s-]+\.[A-Za-z]{3}$ 

pamiętać, że dosłowne kreska w klasie znaków musi być pierwszy lub ostatni lub uciekł (I umieścić go na końcu), ale można umieścić go w środku, co nieprawidłowo staje się zakres.

Należy zauważyć, że ostatniego [a-zA-Z] nie można zastąpić przez \w, ponieważ \w zawiera znak podkreślenia i cyfry.

EDYTOWANA: @tomasz ma rację! \w == [a-zA-Z0-9_] (potwierdzone here), więc zmieniono moją odpowiedź, aby usunąć niepotrzebną \d z pierwszej klasy znaków.

+4

'\ w' jest zwykle [a-zA-Z0-9_]; dlatego nie jestem wielkim fanem tej klasy, ponieważ musisz pamiętać o tej konkretnej definicji słowa. – tomasz

+1

+1 Ode mnie - ładny połów, który '\ w' zawiera' _'. –

+0

Fantastyczne, to działa dzięki dzięki! Czy możesz wyjaśnić, dlaczego mój schemat nie zadziałał? Czy to jest fakt, że przegapiłem \ przy definiowaniu mojego pełnego zatrzymania? –

2

To pytanie zostało poproszone o zezwolenie na trzyliterowe rozszerzenie.

Dla każdego, kto przyjeżdża z DuckDuckGo jak ja (tak, nie należy korzystać z Google: P), ten regex testy dla prawidłowych nazw i ścieżek plików w systemie Windows, Unix en MacOS:

^[^<>:;,?"*|/]+$ 

Uwaga: W Windows, \ jest niedozwolone w nazwach plików, ale powyższe wyrażenie działa dla sprawdzenia poprawnych ścieżek w systemie Windows. Włącz \\ między nawiasami ^[...]+$, jeśli chcesz, aby sprawdzał poprawne nazwy plików i nie sprawdzał ścieżek.

Powiązane problemy