Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Walidacja nazwy pliku.
Forum PHP.pl > Forum > Przedszkole
cabana
Witam. Chcę zrobić walidację nazwy pliku. Próbowałem użyć preg_match oraz ereg. Dodam, że jest to mój pierwszy skrypt używający wyrażeń regularnych.
Otóż nic mi z tego nie wychodzi. Proszę o pomoc.

Próbowałem zrobić to tak:
  1. <?php
  2. $nazwa = 'jakasdowolnanazwa.exe';
  3. if (preg_match('@^([A-Za-z0-9]{1}).([A-Za-z]{3,4})$@i', $nazwa))
  4. {
  5. echo 'ok';
  6. }
  7. else
  8. {
  9. echo 'error';
  10. }
  11. ?>
tolomei
Witaj.

Twoje wyrażenie mówi, że nazwa pliku(przed kropką) powinna się składać z wymienionych znaków, a jej długość wynosi 1. Zamiast tego powinieneś ustalić długość "od do" czyli na przykład {1,20} lub, jeśli tak Ci pasuje, znak plusa co oznaczałoby "1 lub więcej".
Idąc dalej stawiasz kropkę, która oznacza dowolny znak - oczywiście chodzi nam konkretnie o kropkę więc powinieneś postawić backslash przed nią.
Jeszcze jedna rzecz - nawiasy okrągłe służą do wyciągania podciągów z tekstu - Ty nie potrzebujesz tego tutaj więc możesz je ominąć.
Dalej jest dobrze. A więc:

  1. preg_match('@^[A-Za-z0-9]{1,20}\.[A-Za-z]{3,4}$@i', $nazwa)


lub

  1. preg_match('@^[A-Za-z0-9]+\.[A-Za-z]{3,4}$@i', $nazwa)


Nie testowałem(ide na żywca tongue.gif )
Zobacz czy działa.

Pozdrawiam.

PS.
Polecam świetny kurs wyrażeń regularnych tutaj.
cabana
no fajnie ale co jeśli nazwa wyglądała by tak:

zdjecie_z_wakacji.jpg

już udało mi się temu zaradzić.
dla innych na przyszłość może się przydać smile.gif

  1. preg_match('@^.{1,}\.[A-Za-z]{3,4}$@i', $plik)
tolomei
Dla powyższego wyrażenia regularnego mogę Ci wpisać w system taki plik:

../../inny_projekt/index.php

i ta nazwa spełnia Twoje wyrażenie. W zależności jak tego używasz i co trzymasz na serwerze - to może być niebezpieczne.
Dla Twojego pliku, o którym wspomniałeś proponuję takie wyrażenie:
  1. preg_match('@^[A-Za-z0-9_]{1,}\.[A-Za-z]{3,4}$@i', $nazwa)


Do pierwszego nawiasu możesz dorzucić także inne znaki, które przewidujesz, że mogą wystąpić.

Pozdro
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.