PDA

Просмотр полной версии : preg_match


barnaki
18.02.2009, 01:02
есть код но все время выводит incorrect url format
(даже когда все в норме)
в чем может быть дело
а email работает

if (preg_match("/^[0-9a-zA-Z_]+@[0-9a-zA-Z_]+.[a-zA-Z]{2,6}$/",htmlspecialchars($_POST['email']),$user_data))
{
$email = $user_data[0];
}
else
{
$email = "incorrect email format";
}

if (preg_match("/^(http://|https://)?(www)?[\.]?[a-zA-Z0-9@-]+\.[a-z]{2,6}$/",
htmlspecialchars($_POST['url']),$user_data[0]))
{
$url = $user_data[0];
}
else
{
$url = "incorrect url format";
}

EST a1ien
18.02.2009, 01:22
У меня почемуто вначале жаловался пхп на / заменил на # и параметр на GET
и у меня все норм.
if (preg_match("#^(http://|https://)?(www)?[\.]?[a-zA-Z0-9@-]+\.[a-z]{2,6}$#",htmlspecialchars($_GET['url']),$user_data[0]))
{
$url = $user_data[0];
}
else
{
$url = "incorrect url format";
}
print_r($url);

Array ( [0] => http://mytest.ru [1] => http:// )

1.php?url=http://mytest.ru

AkyHa_MaTaTa
18.02.2009, 01:39
а ты не находиш что спец символы надо экранировать в регулярке(http:\/\/|https:\/\/)?

.:EnoT:.
18.02.2009, 03:23
а ты не находиш что спец символы надо экранировать в регулярке(http:\/\/|https:\/\/)?
Если органичитель не слеш, то экранировать не нужно)

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

preg_match("#^(http://|https://)?[www\.]?[a-z0-9-\.]*\.[a-z]{2,6}[/]?[a-z0-9-_\.\#\?/%:=]*$#i", $url, $out)

Пробелы не забудь убрать.

htmlspecialchars($_POST['url'])
А вот это в регулярке не нужно)


З.Ы. ТС, может не стоит по каждому вопросу создавать отдельную тему? есть прикреплённые