preg_match

Discussion in 'PHP' started by barnaki, 18 Feb 2009.

  1. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    есть код но все время выводит 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";
    }
     
  2. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    У меня почемуто вначале жаловался пхп на / заменил на # и параметр на 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
     
  3. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    558
    Likes Received:
    306
    Reputations:
    27
    а ты не находиш что спец символы надо экранировать в регулярке(http:\/\/|https:\/\/)?
     
  4. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Если органичитель не слеш, то экранировать не нужно)

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

    PHP:
    preg_match("#^(http://|https://)?[www\.]?[a-z0-9-\.]*\.[a-z]{2,6}[/]?[a-z0-9-_\.\#\?/%:=]*$#i"$url$out)
    Пробелы не забудь убрать.

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


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