Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Walidacja nazwy pliku.
cabana
post 9.02.2013, 01:09:13
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
tolomei
post 9.02.2013, 01:20:22
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


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.


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
cabana
post 9.02.2013, 01:26:11
Post #3





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


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)


Ten post edytował cabana 9.02.2013, 01:48:52
Go to the top of the page
+Quote Post
tolomei
post 9.02.2013, 02:05:17
Post #4





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


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


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.05.2025 - 08:23