|
| Дата |
|
USD/RUB | 88.6852 | BTC/USD | 67869.5489 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
22.01.2013, 18:19
|
Start Post: php регулярка - хелп
|
Senior Medved
Регистрация: 15.06.2008
Сообщений: 4,146
Бабло: $22479945
|
Вообщем есть текст
какой то текст
###tab
trololo
###tab
какой то текст
надо удалить весь фрагмент
###tab
trololo
###tab
|
|
|
23.07.2013, 02:08
|
#12
|
Senior Member
Регистрация: 31.03.2011
Сообщений: 3,360
Бабло: $669045
|
Цитата:
Сообщение от Ower
PS Я вообще правильно делаю проверку?
if(preg_match($pattern, $_GET['text'])){ ... }
|
не правильно.
preg_match("/регулярка/", $text, $out);
$out - массив с элеменами, если они найдены(соответствуют регулярке)
тоесть делаешь так
if(!empty($out[0])){
echo "Найдено";
}
лень уже регулярку тебе тестить, если никто не напишет(а это врядли) то завтра сделаю.
|
|
|
23.07.2013, 02:16
|
#13
|
Senior Member
Регистрация: 24.11.2010
Сообщений: 229
Бабло: $52860
|
Ower, как-то так http://ideone.com/dwfDZx
Вообще ньюансы именно PHP не скажу - не пользуюсь, что именно там с кодировкой может быть. Но в питоне если код как UTF8 идёт то русские буквы лучше без тире перечислять полностью.
Второе вроде там так же, не? Если что завтра гляну, уже сплю.
|
|
|
23.07.2013, 02:31
|
#14
|
Python кодер
Регистрация: 10.09.2012
Сообщений: 95
Бабло: $27484
|
Ower,
PHP код:
<?php
$a = ""; $pattern = "/^[a-zа-яё\s]{3,100}$/ui"; $subject = "Форум успешных вебмастеров"; if (preg_match($pattern, $subject)) { print "ok"; }
?>
По второму вопросу что-то нефига непонятно..
|
|
|
23.07.2013, 02:41
|
#15
|
ё
Регистрация: 26.10.2011
Сообщений: 1,520
Бабло: $311895
|
Venya Tolinov, не прокатило со словом "Форум успешных вебмастеров"
mironich, А твой вариант получился, спасибо =)
На счет второго вопроса, поступать будут данные типа
Цитата:
img/photo1.jpg
img/photo2.png
img/picture.gif
|
то есть папка, файл с расширением. Вот как бы это и нужно пропускать: буквы, цифры, слеш, точка
Последний раз редактировалось Ower; 23.07.2013 в 02:53.
|
|
|
23.07.2013, 03:02
|
#16
|
ё
Регистрация: 26.10.2011
Сообщений: 1,520
Бабло: $311895
|
Написал, вроде
Цитата:
$patternimage = "/^[0-9a-z._\/\s]{3,100}$/ui";
|
Но хочу еще тире поставить - с ней никак не получается
Цитата:
$patternimage = "/^[0-9a-z.-_\/\s]{3,100}$/ui";
|
Выкидывает ошибку
|
|
|
23.07.2013, 03:06
|
#17
|
Python кодер
Регистрация: 10.09.2012
Сообщений: 95
Бабло: $27484
|
Ower, а зачем фильтровать название файла рег-кой тоесть конечная цель?
М.б все более правильно можно сделать?
PHP код:
#^[a-z\d\.\-/]{3,100}$#i
|
|
|
24.07.2013, 11:14
|
#18
|
Senior Member
Регистрация: 19.04.2007
Сообщений: 2,393
Бабло: $314345
|
Цитата:
Сообщение от Ower
На счет второго вопроса, поступать будут данные типа:
img/photo1.jpg
img/photo2.png
img/picture.gif
то есть папка, файл с расширением. Вот как бы это и нужно пропускать: буквы, цифры, слеш, точка
|
В таком случае кулхацкер сможет пропихнуть путь вида
img/../../../../shell.php
Наверное, надо смотреть, чтобы слэш был ровно 1 всегда (либо столько, сколько предполагается изначально в тз сохранения файлов), и задавать конкретный список расширений (перечислить только картиночные), которые можно закачивать:
PHP код:
$str = 'img/picture.gif';
$pics = array('.gif', '.png', '.jpg', '.bmp');#разрешенные типы файлов
if (substr_count($str, '/') != 1) {die('Должен быть 1 слэш');}
if (!in_array(substr(basename($str), strlen(basename($str)) - 4, 4), $pics, TRUE)) {die('Запрещенный тип файла - '.substr(basename($str), strlen(basename($str)) - 4, 4));}
и только потом проверять название файла и папки (регулярки те же, что выше уже сделали).
|
|
|
24.07.2013, 13:17
|
#19
|
ё
Регистрация: 26.10.2011
Сообщений: 1,520
Бабло: $311895
|
Да, вот так то что нужно. Про каталоги не подумал, там ведь идет у меня вывод картинки <img src="img/photo.jpg"> , то есть можно что угодно туда подсунуть.
Спасибо =)
|
|
|
24.07.2013, 13:33
|
#20
|
Ебланнед
Регистрация: 28.05.2013
Сообщений: 44
Бабло: $70920
|
Цитата:
Сообщение от DimaX
В таком случае кулхацкер сможет пропихнуть путь вида
img/../../../../shell.php
|
написать img\/photo1\.jpg$ и ничего он не пропихнёт
|
|
|
|