![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Jak napisać wyrażenie, które zwróci mi fałsz, jeśli nazwa pliku posiada jedno z podanych rozszerzeń? Napisałem coś takiego i wiem, że nie ma prawa działać, ale pokazuję, żeby nikt nie pisał, że nie próbowałem:
Kod /\.(php|phps|php5|php4|bin|js|p|pas|java|jav|class|inc|php|py|pl|cgi|gz|tgz|bz|b z2|tbz|zip|rar|tar|7z|gtar|gzip)$/i /\.[^php|phps|php5|php4|bin|js|p|pas|java|jav|class|inc|php|py|pl|cgi|gz|tgz|bz| bz2|tbz|zip|rar|tar|7z|gtar|gzip]$/i W pierwszym przykładzie nie wiem jak zanegować całe wyrażenie, a w drugim jest zanegowane, ale nie wiem jak zrobić, by w nawiasach klamrowych była opcja "lub". |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
A nie łatwiej stworzyć tablicę rozszerzeń i sprawdzać czy http://php.net/manual/en/splfileinfo.getextension.php w niej występuje bądź nie?
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Nie prosciej i czytelniej pobrac ci to rozszerzenie z nazwy pliku i porownac do tablicy rozszerzen uzywajac in_array ?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Używam dodatku o nazwie elFinder i tam niestety może być tylko wyrażenie regularne. Więc muszę mieć wyrażenie regularne, które neguje mi te rozszerzenia.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
@nospor poniżej:
A rzeczywiście, pewnie masz rację. No to trzeba będzie inaczej pokombinować, gdyż poniższe to kod, a nie samo wyrażenie. Jeśli koniecznie wyrażenia reg. to np. tak (wykorzystując Twoje pierwsze wyrażenie):
Aha, dodam, że nie trzeba wcale tworzyć funkcji i jeszcze brakuje obsłużenia sytuacji, gdy rzeczywiśćie trafimy na błąd. Czyli można to zrobić lepiej. Samo zanegowanie wyrażenia regularnego można jak widać zrobić na kilka sposobów. Ten post edytował kreatiff 22.10.2014, 11:12:48 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@kreatif ale chodzi chyba o to, ze adbacz ma mozliwosc jedynie wstawienia wyrazenia regularnego. Jakby mogl wstawic kod php, jak proponujesz, to rownie dobrze moglby zrobić jak mu pisalismy na początku
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Racja, ale teraz zatem dochodzimy do etapu, gdzie bez wiedzy jak wyrażenie jest przyrównywane do nazw plików, nie jesteśmy w stanie podać rozwiązania. Bo samo preg_match (jesli jest wykorzystywane) zwraca false tylko jeśli natrafi na błąd i samo z siebie nie zwróci fałszu, gdy trafienie będzie lub nie.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 340 Pomógł: 46 Dołączył: 31.07.2009 Skąd: A Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o to, jak wyrażenie zostanie użyte w aplikacji, gdzie będzie wykorzystywane. To jest jakiś CMS, gdzie w panelu wpisujesz ten ciąg, i tylko jego? A gotowy mechanizm sobie wykorzystuje tenże ciąg wg własnego algorytmu?
Bo jeśli będzie podstawione do preg_match, to tak jak wyżej - nie zwróci false inaczej niż gdy natrafi na błąd (takim błędem może być np. jakiś znak spoza UTF-8, gdy nasz ciag porównujemy z modyfikatorem u). Na stronie, którą podałeś jest wykorzystywane własnie preg_match. Zatem to nigdy nie zwróci false gdy nie wystąpi błąd (a ten nie może wystąpić, by dopasowanie lub niedopasowanie było wykonane poprawnie). Chyba, że 0 (ale === 0, nie == 0 - musi zostać przyrównany również typ) potraktujesz jako false.
Ten post edytował kreatiff 22.10.2014, 12:37:17 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.08.2025 - 22:44 |