PHP + preg_match

12
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
1294

День добрый комрады, подскажите плиз следующее:


preg_match("/\;/", $a);

Проверяю вхождение ";" в $a. А как бы сделать проверку сразу по ряду вхождений? например проверять так же "!" , """ (кавычку), и.т.п. Другими словами, надо перечислить ряд совпадений...

Спасибо.

Есть около 15.000 ipv4 !!! (http://onyx.net.ua/price.php#ipv4) Качественный хостинг с 2005 года - лучшее клиентам! (http://onyx.net.ua/)
esetnod
На сайте с 16.07.2009
Offline
134
#1

Там вроде ж pcre?

тогда /(1|2|3)/ , так, наверное.

Быстрый хостинг на SSD от $0.99 (http://just-hosting.ru/) | OpenVZ (http://just-hosting.ru/vds.html) и KVM (http://just-hosting.ru/vds-kvm.html) VDS от $7.95
iHead
На сайте с 25.04.2008
Offline
137
#2

например так

'/[;!"]/'

Рекомендуемый хостинг партнер 1С-Битрикс (https://www.ihead.ru/bitrix/), PHP-хостинг (https://www.ihead.ru/php/), доверенный партнер RU-CENTER (https://www.ihead.ru/news/573.html), официальный представитель REG.RU в Кирове (https://www.ihead.ru/news/851.html)
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#3

Сейчас затестимс, tnx.

---------- Добавлено 18.06.2013 в 14:12 ----------

esetnod, сработало по вашему описанию. TNX.

---------- Добавлено 18.06.2013 в 14:16 ----------

iHead, в вашем случае ситаксическая ошибка , если так:


if ( preg_match("/[;!"]/", $name) ) {

Если вот так:


if ( preg_match('/[;!"]/', $name) ) {

или так


if ( preg_match("/\[\;\!\"\]/", $name) ) {

то не находит вхождений...

Но все равно спасибо :D

---------- Добавлено 18.06.2013 в 14:25 ----------

По ходу пьесы возник еще один интересный вопрос, допустим не допустить в поле "Имя" символы типа % и ! это есть нормальным, но как быть например с полем password ? ведь там как раз таки ценятся такие вот символы.....

[umka]
На сайте с 25.05.2008
Offline
456
#4
Romka_Kharkov:

то не находит вхождений...

Не может быть

$t="aaa;bbb";
if (preg_match('/[;!"]/',$t)) {
echo "Match";
} else {
echo "Doesn't match";
}
Romka_Kharkov:
По ходу пьесы возник еще один интересный вопрос, допустим не допустить в поле "Имя" символы типа % и ! это есть нормальным, но как быть например с полем password ? ведь там как раз таки ценятся такие вот символы.....

Так сделайте для поля "Имя" проверку по одному выражению, а для пароля другую.

Сложность пароля регуляркой вообще не оценить. Нужно делать несколько проверок на наличие символов из разных наборов.

Лог в помощь!
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#5
'[umka:
;11870165']Не может быть

$t="aaa;bbb";
if (preg_match('/[;!"]/',$t)) {
echo "Match";
} else {
echo "Doesn't match";
}




Так сделайте для поля "Имя" проверку по одному выражению, а для пароля другую.
Сложность пароля регуляркой вообще не оценить. Нужно делать несколько проверок на наличие символов из разных наборов.

Вы немного меня не поняли, я говорю о том, что например в Имени имеет смысл проверять всяческие точки , запятые и кавычки, а в поле пароля они концептуально нужны и обязаны быть, стало быть через поле пароля надо не допустить всяких инъекций, но при этом оставить возможность пользователю использовать эти точки и запятые с кавычками для надежности пароля. Я не пытаюсь оценивать его :)

Верхний пример еще раз проверил, действительно сработало, видимо очепятка какая-то где-то по пути, спасибо, но уже сделал как пишут выше, тоже норм :D

[umka]
На сайте с 25.05.2008
Offline
456
#6

Так чтобы не было инъекций, делайте какой-нибудь mysqli_real_escape_string().

Для пароля можно сразу делать md5() или sha1().

А то может, у какого-нибудь пользователя пароль в виде кода инъекции. Что ж ему теперь, аккаунт не заводить? :)

Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#7
'[umka:
;11870383']Так чтобы не было инъекций, делайте какой-нибудь mysqli_real_escape_string().
Для пароля можно сразу делать md5() или sha1().
А то может, у какого-нибудь пользователя пароль в виде кода инъекции. Что ж ему теперь, аккаунт не заводить? :)

Вах, не подумал как-то, есть метода на уровне самого SQL, а я тут в PHP упражняюсь :D

насчет md5() сразу, тоже вариант отличный.... приму на заметку. :)

seocore
На сайте с 25.09.2006
Offline
143
#8
Romka_Kharkov:
я говорю о том, что например в Имени имеет смысл проверять всяческие точки, запятые и кавычки, а в поле пароля они концептуально нужны и обязаны быть

лучше не искать странные символы в поле, а проверять соответствует ли поле заданному паттерну символов, и если есть любой посторонний символ, то такое безобразие не принимать

как уже написали - поле пароля лучше сразу сохранять в md5, кстати, никто не мешает и перестраховаться и сравнивать по md5 сами строки (md5 функция поддерживаемая в MySQL), как пример: where md5(login)=".md5($login)." and password=".md5($password)." :)

Инструменты для веб-мастера: кластеризатор СЯ (https://goo.gl/MQWfqO), все запросы конкурента (https://goo.gl/hd5uHS), дешевые XML-лимиты (https://goo.gl/aDZbPI)
[umka]
На сайте с 25.05.2008
Offline
456
#9
seocore:
where md5(login)

Эта фигня отключит использование индексов

seocore
На сайте с 25.09.2006
Offline
143
#10
'[umka:
;11870682']Эта фигня отключит использование индексов

да, неподходящий вариант, хотя таблицы пользователей не такие большие, чтобы это было критично

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий