nixp.ru v3.0

27 мая 2017,
суббота,
20:40:13 MSK

DevOps с компанией «Флант»
apple написал 15 марта 2009 года в 13:21 (1258 просмотров) Ведет себя неопределенно; открыл 19 тем в форуме, оставил 98 комментариев на сайте.

есть переменная $d . как проверить её? она должна содержать только буквы цифры и(или) точки.

Знаю что escapeshellarg() или escapeshellarg().

примеров нету.

Дмитрий Шурупов

Советую познать силу регулярных выражений ;-)

if preg_match('/^[a-z0-9\.]+$/', $b)
  echo "Переменная в порядке";
else
  echo "Что-то не так...";
apple

я вот так сделал. работает.

$dom = escapeshellarg($dom);

спсб!

тему можно закрывать.

Дмитрий Шурупов

escapeshellarg() не проверяет значение переменной, а тупо экранирует в ней всякие кавычки — это не то…

apple

escapeshellarg() так он не защищает от всяких подлых символов? типа пробелов и / ; «»

Дмитрий Шурупов

Ага, забыл, но суть не меняется.

escapeshellarg() добавляет в строку кавычки и/или «\» для того, чтобы «проблемные» символы корректно передались шеллу в system(). Это «защищает» от возможности подставить в system() произвольную строку, которая может привести к выполнению любых команд, но не «проверяет переменную».

Для проверки же переменной надо использовать регулярные выражения и выдавать ошибку, если введена некорректная строка.

P.S. Как понимаю, нужна проверка на домен, а для этого можно составить куда более умное выражение, чем просто проверка на наличие букв/цифр/точек…

apple

домены с дефисом не пропускает.

чего исправить в проверке?

Дмитрий Шурупов

Заменить регулярное выражение на:

'/^[a-z0-9\.\-]+$/'

А лучше — сразу на что-нибудь, например, такое:

'/^([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}$/'

P.S. В гугле можно найти кучу регэкспов для проверки доменов. Последнее я как раз только что взял оттуда… (http://regexlib.com/DisplayPatterns.aspx)

DimkaS

Ооо, какой сайт! Спасибо! :)

apple
Dmitry Shurupov
Заменить регулярное выражение на:

'/^[a-z0-9\.\-]+$/'

А лучше — сразу на что-нибудь, например, такое:

'/^([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}$/'

не пропускает домены первого уровня например ru com итд

Дмитрий Шурупов

> не пропускает домены первого уровня например ru com итд

На заметку: Домены первого уровня — это .ru или .com, а не что-то.com.

Кроме того, это он однобуквенные не пропускает (x.org). А 2-буквенные — нормально (ya.ru). Можно исправить так:

'/^([0-9a-zA-Z][-\w]*[0-9a-zA-Z]?\.)+[a-zA-Z]{2,9}$/'
apple
Dmitry Shurupov
> не пропускает домены первого уровня например ru com итд

На заметку: Домены первого уровня — это .ru или .com, а не что-то.com.

Кроме того, это он однобуквенные не пропускает (x.org). А 2-буквенные — нормально (ya.ru). Можно исправить так:

'/^([0-9a-zA-Z][-\w]*[0-9a-zA-Z]?\.)+[a-zA-Z]{2,9}$/'

я знаю что такое домен 1уровня.)

$b=preg_replace("/[*]/","<font color="/Blue/">\\1 aaaa</font>","$b");</font>

<font color=«/Blue/»>как окрасить строку выводящую * в синий цвет?</font>

<font color=«/Blue/»>этот пример окрашивает тольк аааа.</font>

Дмитрий Шурупов

> $b=preg_replace…

Ну, это уже финиш. Вы бы почитали для начала, как оно вообще работает. Выражение бредово по ряду причин… Вопрос поставлен плохо.

apple

оно есть в примерах.

Nikamka

Здесь развернуто описано как проверить переменную на целое число: http://hashcode.ru/questions/153602/проверка-переменной-на-целое-число