PHP RegEx для "Название сайта" - PullRequest
1 голос
/ 11 мая 2009

Дубликат: Проверка PHP / регулярное выражение для URL

Моя цель - создать регулярное выражение PHP для имени сайта. Регулярное выражение предназначено для формы сбора сведений о потенциальных клиентах и ​​должно принимать любой законный синтаксис имени веб-сайта, который кто-либо может ввести После исчерпывающего поиска я удивляюсь, что не могу найти его там.

Вот совпадения регулярных выражений, которые я ищу:

И, оно также должно совпадать:

  • любой из перечисленных выше с обратной косой чертой, например: somewebsite.com/
  • субдоменов

Ответы [ 5 ]

8 голосов
/ 11 мая 2009

RegEx не требуется.

$subject = 'example.com';
$part = (stripos($subject, 'http://') === FALSE)  ? 'http://' : '' ;
var_dump(filter_var($part.$subject, FILTER_VALIDATE_URL));
3 голосов
/ 13 мая 2009

Я решил сравнить ответы здесь, чтобы доказать, что регулярные выражения не являются ответом на такие простые задачи. Код Энди Ликмана на 30–60% быстрее, чем другие ответы. У него была ошибка, но я исправил ее с помощью строки кода. Вы можете просмотреть мои результаты ниже.

Вот код, на котором выполнялись тесты.

http://pastie.org/476900

альтернативный текст http://img254.imageshack.us/img254/7821/capturevzh.png

PS Если кто-то еще использует регулярное выражение для проверки URL, я могу сойти с ума;)

3 голосов
/ 11 мая 2009

Вам может понадобиться настроить его:

<?php

$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&amp;?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';

$url1  = "http://www.somewebsite.com";
$url2  = "https://www.somewebsite.com";
$url3  = "https://somewebsite.com";
$url4  = "www.somewebsite.com";
$url5  = "somewebsite.com";

function valURL($pattern, $url) {

        $return = false;

        if(preg_match($pattern, $url)) {
                $return = true;
        }

        if($return == true) {
                echo "Match URL: <font color='green'>" . $url . "</font><br /><br />";
        } else {
                echo "Try Again: <font color='red'>URL: " . $url . "</font><br /><br />";
        }
}

valURL($pattern, $url1);
valURL($pattern, $url2);
valURL($pattern, $url3);
valURL($pattern, $url4);
valURL($pattern, $url5);

?>
0 голосов
/ 11 мая 2009
^(https?://)?(([0-9a-z_!'().&=$%-]: )?[0-9a-z_!'().&=$%-]@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!'()-]\.)([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!*'().;?:@&=$,%#-])/?)$
0 голосов
/ 11 мая 2009
/^([a-z0-9]([-a-z0-9]*[a-z0-9])?\\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])$/i

http://www.shauninman.com/archive/2006/05/08/validating_domain_names

Предоставлено Google. Это ОЧЕНЬ сложно, поэтому кто-то может иметь более простой.

РЕДАКТИРОВАТЬ: Попробуйте сначала ответ Энди. Если вы можете найти альтернативу регулярному выражению, 9/10 альтернатива намного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...