![]() |
Проверка на сочетание символов
Как проверить три последних символа строки - и если они не являются, скажем jpg или gif - выдать alert box?
|
Neo
методом? |
Javascript
|
mystr.indexOf("jpg",mystr.length-3)
|
А конкретней? Не понимаю, как применять :confused:
|
mystr переменная со строкой.
|
вот так?
forms.text1.value.indexOf("jpg gif arj",forms.text1.value.length-3) |
Нет, только одно расширение.
|
А если нужно несколько расширений?
И как потом обрабатывать эту функцию? В смысле как, если ни одно из расширений не верно, выдать, к примеру, alert('no') Добавлено через 2 часа и 2 минуты: Итак, я сделал это следующим способом. if((document.forms.upload.file.value.lastIndexOf(".jpg")==-1) && (document.forms.upload.file.value.lastIndexOf(".gif")==-1) && (document.forms.upload.file.value.lastIndexOf(".jpeg")==-1) && (document.forms.upload.file.value.lastIndexOf(".JPG")==-1) && (document.forms.upload.file.value.lastIndexOf(".GIF")==-1) && (document.forms.upload.file.value.lastIndexOf(".JPEG")==-1)) { alert("Допустимые расширения файлов: JPG JPEG GIF DOC TXT PM6."); return false; } else { } Все, можно самому себе ставить 5. |
а если имя jpg1.php? ;)
Добавлено через 9 минут: я так и не понял :почему тебе indexOf не подошел? |
Потому что я не понял как его применять. А какая разница?
|
а разница в том, что str.indexOf("jpg",str.length-3) сравнивает только последние три символа твоей строчки. а lastIndeOf только последнее вхождение по всей строчке...
в первом случае файл 23jpg.php спокойно загрузится в твою директорию и последствия будут непоправимы :) , а во втором вариант 23jpg.php не прокатит. тебе же это надо было? а ты сдеал совсем не то... Удачи! |
А можно вопрос? Зачем нужна проверка на javascript? Ведь Neo в любом случае должен сделать проверку расширения в скрипте закачки. Со страницы можно убрать весь javascript, и тогда, если нет проверки в скрипте, любой файл спокойно закачается... Так почему бы не оставить одну проверку в скрипте?
|
Вложений: 1
hempsmoke
Ну ясно. Расскажи мне тогда, если не лень, как изменить мой отрезок кода так, чтобы использовалась фукция indexOf, а то я так и не понял куда ее писать V0iD , В том то и дело что у меня в скрипте нет проверки. Скрипт-то php, а я не знаю как реализовывать проверку на php. Если знаешь - то скажи. Вот мой скрипт (прикладываю) |
Цитата:
Neo вот, вроде работаеть... Код:
<html> |
Ну, молодец. тебе 5.
Буду еще очень признателен, если расскажешь, как разрешить более одного расширения. Спасибо |
Neo
введи массив из расширений аля var ext = new Array ("jpg", "gif"); и запхай проверку indexOf в нее.. переварил? ;) |
Вот так?
<script> function check() { var ext = new Array ("jpg", "gif"); str=document.forms.upload.upload.value; k=str.indexOf(ext,str.length-3); if (k==-1) alert("НЕ фига! это не картинка"); else document.write("картинка загружена"); } </script> |
прости меня, милок.. :) - я забыл про цикл сказать!
<script> var ext = new Array ("jpg", "gif"); function check() { for (i=0;i<=ext.length-1;i++) { str=document.forms.upload.upload.value; k=str.indexOf(ext[i],str.length-3); if (k==-1) alert("НЕ фига! это не картинка"); else document.write("картинка загружена"); } } </script> |
Опять ты кое что забыл... Алерт бокс выкидывается ровно столько раз, сколько есть объектов в массиве.. к чему бы это?
Добавлено через 4 минуты: а вот так все работает как задумано: ... var ext = new Array ("jpg", "gif"); for (i=0;i<=ext.length-1;i++) { str=document.forms.upload.upload.value; k=str.indexOf(ext[i],str.length-3); if (k==-1) { alert("НЕ фига! это не картинка"); return false; } else { document.write("картинка загружена"); } } ... Добавлено через 3 минуты: Хотя нет... так она не пропускает даже когда картинка есть картинка... Что я не так сделал? |
А вот как в скрипте:
[OOPS. Глупость была :), звиняюсь...] |
Почему глупость? Разве то что ты написал - не рабочее? Я еще даже не успел проверить.
|
Вот это не глупость, это я проверил...
было: PHP код:
PHP код:
|
Теперь этот блок ваще ничего на экран не выводит... Даже пустую input строку.
Вернее вся форма на месте, но статусной строки нет и в помине. ни если файл правильный, ни если неправильный... Добавлено через 1 минуту: По-моему, там вложенный блок IF, и соотвественно должно быть два раза else {}? Но где точно - не знаю |
если файл не пуст {
| если расширение jpg, gif, txt | { | отсылка | } } иначе:{} Neo: else там помоему стоит наместе, т.е относится к первому IF... Кстати, помоему количесвто IF можно уменьшить: ------------------------------------------------------------------- $filename = $HTTP_POST_FILES[file][name]; preg_match("/.*.(.*)/", $filename, $result); $result = $result[1]; if (( !empty($file))&( ($result == "jpg") or ($result == "gif") or ($result == "txt") ) ) { echo "<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white; background-color: #686898; border-style: none;' value=' Сообщение отослано. Спасибо!'></form>"; sendmsg($to, $subject, $text, $from, $file, $types); } else { echo "<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white; background-color: #686898; border-style: none;' value=' '></form>"; } -------------------------------------------------------------------- |
в ход пошло php?
|
CEO
hempsmoke Не работает. И первом, и во втором (сокращенном) вариантах пишет, что недопустимый формат файла. Я поставил вот этот отрезок: PHP код:
|
Neo :Проверь что получилось в результате
preg_match("/.*.(.*)/", $filename, $result); Аттто она какая-то подозрительная После $result = $result[1]; Напиши echo $result. |
Щас...
Добавлено через 5 минут: Не, ничего не меняется. Хоть с echo $result;, хоть без нее всегда одно и тоже сообщение в статусной строке |
мдя :) Neo я тебя ща скрипт пишу, щас полностью выложу
одно могу сказать с html, php и JavaScript у тебя плоховато :) особено с Html такая муть ........ |
Neo :echo $result; -- должна была вывести содержимое переменной $result, а раз не выводит значит в ней ничего нет и поэтому все что до else автоматически не срабатывает. Почему в $result ничего не оказалось? Мне тоже хотелось бы это узнать. Посмотрим может автор сумейт ответить на этот вопрос...
|
Гм очень странно. Возможно HTTP_POST_FILES не работает. Попробуй сделать
PHP код:
(может PHP старый? Потому что на домашней машине у меня самый последний...) |
мдя :)
<input name="file" type="file"> $file_name - это то что вам надо :) Добавлено в ту же минуту: ща выложу полный скрипт ждёмс пока :) |
Дурацкая мысль посетила мою голову... NEO: а ты вообще файл к форме прикрепляешь хоть какой-нибудь?
Добавлено в ту же минуту: smap :Давае его суда. Оччень интересно! |
написал, осталось только протестить :)
|
smap
ну скрипт не я писал. я его скачал в инете... так что это не у меня с html плохо... Добавлено через 26 минут: smap ну, чего же не выкладываешь? |
вообщем всё работате только вот почту почемуто не отсылает.. вот сижу тут тестью, так что народ ждём еще немного :)
принципи можете самной потестить.. или хотябы посмотреть чё получаеться :) http://chartclub.samara.ws/neo/neo.php |
Neo Не выкладывает, т.к. с формой помоему, как я и говорил -- все впорядке, в т.ч. и с <input name="file" type="file">.
|
Да, дай лучше сорс посмотреть :)
|
smap
не отсылает потому что ты из выпадающего списка убрал мылы.... почему бы тебе сорц в самом деле не выложить? |
| Часовой пояс GMT +4, время: 01:27. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.